【发布时间】:2018-07-16 00:09:31
【问题描述】:
在以下代码中,当我尝试创建Obiektstatyczny 的对象时,正在调用Miasto(基类)的构造函数。
class Miasto
{
public:
Miasto();
int rozmiar;
};
class Obiektstatyczny :public Miasto
{
std::vector <Obiektstatyczny> blokowisko;
int x, y;
public:
Obiektstatyczny();
};
Obiektstatyczny::Obiektstatyczny()
{
for (int i = 2; i < rozmiar; i++)
for (int j = 2; j < rozmiar; j++)
blokowisko.push_back(Blok(i, j));
}
Miasto::Miasto()
{
cin >> iloscBlokow;
cin >> szerokoscBloku;
rozmiar = iloscBlokow*szerokoscBloku;
mapa.assign(rozmiar, vector<int>(rozmiar));
bufor.assign(rozmiar, vector<int>(rozmiar));
for (int i = 0; i<rozmiar; i++)
for (int j = 0; j < rozmiar; j++)
mapa[i][j]=bufor[i][j]=0;
}
我认为原因是我试图自己创建新的Obiektstatyczny 对象,而不是通过基类,因此程序不断重复自己。但是,我不知道如何正确地做到这一点。我的尝试失败了。
我试图在包含Obiektstatyczny 的Miasto 类中创建一个字段,然后在Miasto 的方法中对其进行初始化,但我得到了
“未知的覆盖说明符”错误。
Obiektstatyczny obj;
void initializeObj()
{
obj = Obiektstatyczny();
}
【问题讨论】:
-
我不完全明白你的问题有什么令人惊讶的地方?基类构造函数当然是在派生类构造函数进入之前调用的。没有必要
new一个 超类实例,你尝试这样做会导致无限递归。 -
这就是应该发生的事情。 “惨遭失败”不是问题描述。我不知道您所说的“不通过基类”是什么意思。
标签: c++ object constructor default-constructor