【发布时间】:2016-03-14 07:07:21
【问题描述】:
我正在用 OpenGL 做计算机作业
但我是 C++ 新手。这与 Java 非常不同。
我试过了。
class Map {
private :
public :
short mapkind;
float a = 5;
Map()
{}
};
class Road : public Map {
private :
public :
Road()
{
mapkind = 0;
}
};
class Glass : public Map {
private:
public:
float color[3] = { 0.0, 1.0, 0.0};
Glass()
{
mapkind = 1;
}
};
然后我制作了数组。
Map* maps[10] = { new Road(),
new Glass(),
new Road(),
new Glass(),
new Glass(),
new Road(),
new Road(),
new Glass(),
new Road(),
new Glass() };
这是在我的主循环中。
for (int i = 0; i < 10; i++) {
if ((*maps)[i].mapkind == 0) {
//draw road
Road* temp;
temp = (Road*)maps[i];
}
else if ((*maps)[i].mapkind == 1) {
//draw glass
Glass* temp;
temp = (Glass*)maps[i];
}
else {
//exit(4);
printf("error %hd %d \n", (*maps)[i].mapkind);
}
}
我学过 C 和指针,但它太老了。我猜在 Array 中,将 'new Class()' 作为一个元素是错误的,但我不知道如何解决。
第一个数字是短类型 %hd,第二个是 int 类型 %d,用于打印短类型变量 'mapkind'
【问题讨论】:
-
不要用成员变量来说明它是什么类型的对象,而是学习虚函数。
-
如果您通过添加
virtual方法(或析构函数)使您的类具有多态性,那么您可以简单地使用dynamic_cast来检查基类是否指向特定的派生类.例如,检查maps[i]是否指向Glass或不使用Glass* temp = dynamic_cast<Glass*>(maps[i])。请注意,这仅在类是多态的(具有虚拟方法)时才有效。
标签: c++ arrays oop pointers downcast