gpt4 book ai didi

c++ - 基类中的派生类实例

转载 作者:行者123 更新时间:2023-11-28 06:29:17 24 4
gpt4 key购买 nike

这是我试图理解的代码。它没有特定用途。我只是想了解发生了什么。

#include<iostream>
using namespace std;

class derivedClass;
class baseClass
{
public:
int objID;
derivedClass* dcObjPtr;

baseClass()
{
cout << "(1) Default constructor" << objID << endl;
}

baseClass(int ID)
{
objID = ID;
dcObjPtr = new derivedClass(1);
cout << "(2) Constructing base object with ID: " << objID << endl;
}
};

class derivedClass : public baseClass
{
public:
derivedClass()
{}

derivedClass(int ID) : baseClass(ID)
{
cout << "(4) Constructing derived object with ID: " << objID << endl;
}
};


int main(int argc, char** argv)
{
derivedClass dcObj(1);

return 0;
}

使用 VS2013 我得到错误“派生类:类没有构造函数”,我认为这不是正确的错误。

我首先使用的是 derivedClass 实例,而不是指针。这给了我一个关于分号的奇怪错误。然后我看到this post其中接受的答案是有一个指针,而不是一个实例。

这些是我的问题:

  1. 为什么编译器提示没有构造函数。该类显然具有构造函数。
  2. 这将如何运作?当我们创建一个dervedClass的实例时,里面有一个baseClass部分。而这个baseClass部分里面有一个derivedClass,等等。这是递归的。我会假设如果它有效,它会导致段错误或类似的事情。我假设这将是递归的(如果可行的话)是否正确?

干杯。

最佳答案

通过在 baseClass 构造函数中调用 new derivedClass,您可以在定义 derivedClass 之前使用它的定义。您需要做的是将构造函数定义移到 baseClass 之外和 derivedClass 之后,如下所示:

#include<iostream>
using namespace std;

class derivedClass;
class baseClass
{
public:
int objID;
derivedClass* dcObjPtr;

baseClass()
{
cout << "(1) Default constructor" << objID << endl;
}

baseClass(int ID);

};

class derivedClass : public baseClass
{
public:
derivedClass()
{}

derivedClass(int ID) : baseClass(ID)
{
cout << "(4) Constructing derived object with ID: " << objID << endl;
}
};

baseClass::baseClass(int ID)
{
objID = ID;
dcObjPtr = new derivedClass(1);
cout << "(2) Constructing base object with ID: " << objID << endl;
}

int main(int argc, char** argv)
{
derivedClass dcObj(1);

return 0;
}

关于c++ - 基类中的派生类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27903685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com