在c ++中使用堆内存

时间:2016-05-22 18:05:44

标签: c++ heap

我有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;

但为什么我不能做第一种方式?

2 个答案:

答案 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)

再见