基础 class 中的派生 class 实例
Derived class instance in the base class
这是我试图理解的代码。它没有特定用途。我只是想了解发生了什么。
#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: class has no constructors",我认为这不是正确的错误。
我首先使用的是 derivedClass 实例,而不是指针。这给了我一个关于分号的奇怪错误。然后我看到 this post 接受的答案是有一个指针,而不是一个实例。
这些是我的问题:
- 为什么编译器抱怨没有构造函数。 class 显然有构造函数。
- 这将如何运作?当我们创建一个dervedClass的实例时,里面有一个baseClass部分。而这个baseClass部分里面有一个derivedClass,等等。这是递归的。我会假设如果它有效,它会导致分段错误或类似的事情。我认为这将是递归的(如果可行的话)是否正确?
干杯。
您在 derivedClass
定义之前通过在 baseClass
构造函数中调用 new 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;
}
这是我试图理解的代码。它没有特定用途。我只是想了解发生了什么。
#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: class has no constructors",我认为这不是正确的错误。
我首先使用的是 derivedClass 实例,而不是指针。这给了我一个关于分号的奇怪错误。然后我看到 this post 接受的答案是有一个指针,而不是一个实例。
这些是我的问题:
- 为什么编译器抱怨没有构造函数。 class 显然有构造函数。
- 这将如何运作?当我们创建一个dervedClass的实例时,里面有一个baseClass部分。而这个baseClass部分里面有一个derivedClass,等等。这是递归的。我会假设如果它有效,它会导致分段错误或类似的事情。我认为这将是递归的(如果可行的话)是否正确?
干杯。
您在 derivedClass
定义之前通过在 baseClass
构造函数中调用 new 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;
}