我有3个类,Shape是我的基类,Rectangle和Triangle是我的派生类。
我想将派生类中的四个对象存储到Shape的指针中。
Shape* sh1=new Shape[4];
Rectangle aR(2,3);
Rectangle bR(4,5);
Triangle aT(2,3);
Triangle bT(4,5);
sh1[0]=&aR;
sh1[1]=&bR;
sh1[2]=&aT;
sh1[3]=&bT;
但我有一个问题, 我该如何解决?
我可以这样做
Shape* sh1[4];
Rectangle aR(2,3);
Rectangle bR(4,5);
Triangle aT(2,3);
Triangle bT(4,5);
sh1+0=&aR;
sh1+1=&bR;
sh1+2=&aT;
sh1+3=&bT;
但为什么我不能做第一种方式?
答案 0 :(得分:3)
你的意思是Shape **sh1 = new Shape*[4];
。你想要一个指针数组,而不是一个形状数组。如果你将Shape
类抽象化,那么你也应该得到一个非常有用的诊断。
当然你根本不应该使用new
,而是使用容器:
std::vector<Shape*> sh2 = {&aR, &bR, &aT, &bT};
答案 1 :(得分:0)
因为变量&#34; sh1&#34;是一个指向Shape的指针,&#34; sh1 [0]&#34;是一个形状!
您无法将指向Shape的指针指定给Shape。
因此
sh1[0] = &aR
错了。
请记住在C / C ++中
sh1[i] is equal to *(sh+i)
再见