继承类的构造函数未运行
Inherited class's constructor is not running
我有三个类,A、B和C。
已编辑代码
#include <iostream>
class A {
public:
virtual void print() {
std::cout << "A" << std::endl;
}
A() : x(0) {} // constructor
void SetX (int tmp){
x = tmp;
}
void printX() {
std::cout << "x = " << x << std::endl;
}
private:
int x;
};
class B : public A {
public:
virtual void print(){
std::cout << "B" << std::endl;
}
B(int tmp) : A() {
SetX(tmp);
}
};
class C : public B {
public:
virtual void print(){
std::cout << "C" << std::endl;
}
C(int tmp) : B(tmp) {
std::cout << "Debug print" << std::endl;
}
};
int main() {
B* b = new B(1);
C* c = new C(2);
b->print();
b->printX();
c->print();
c->printX();
return 0;
}
打印为b->printX=1并且对于c->printX=0
当创建对象B时,一切都很好。
但是当创建对象C时,类A的默认值(var x(仍然是0(默认值(。
我在C类的构造函数中添加了调试行,但在日志中没有看到,看起来构造函数没有运行。当我只创建对象C时,我在类B的构造函数中做了同样的事情,我也没有看到任何调试打印。
此代码没有任何编译错误。生成成功完成。
以下是合法且可使用的C++。您的代码不是合法的C++。
我在类a中添加了一个void printX()
方法来说明这个例子。
#include <iostream>
class A {
public:
virtual void print() {
std::cout << "A" << std::endl;
}
A() : x(0) {} // constructor
void SetX (int tmp){
x = tmp;
}
void printX() {
std::cout << "x = " << x << std::endl;
}
private:
int x;
};
class B : public A {
public:
virtual void print(){
std::cout << "B" << std::endl;
}
B(int tmp) : A() {
SetX(tmp);
}
};
class C : public B {
public:
virtual void print(){
std::cout << "C" << std::endl;
}
C(int tmp) : B(tmp) {
std::cout << "Debug print" << std::endl;
}
};
int main() {
B* b = new B(1);
C* c = new C(2);
b->print();
b->printX();
c->print();
c->printX();
return 0;
}
相关文章:
- 让某个类的 '=' 运算符在声明时运行构造函数
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- 如何在全局变量的构造函数之前运行函数
- 从类重载的新运算符运行非默认构造函数
- 运行 std::线程不在构造函数中
- C++:链接库两次,全局构造函数运行两次吗?
- C 从类的构造函数运行Boost线程
- 两个构造函数(带和不带参数),没有输入 -> 没有参数运行。跳过上述类中的构造函数
- 是否可以在运行时切换到不同的基类构造函数?
- 为什么在C 类构造函数的正确编译后发生运行时错误
- C 复制构造函数产生运行时错误
- 如何使用 Thread 运行类构造函数
- 如何在运行时使用构造函数初始化类中私有的数组
- C 构造函数运行时/编译时间
- 不带操作员的对象的数组初始化,复制构造函数或默认构造函数和运行时参数
- C ++ porgram 不会运行,我的构造函数是否有错误
- C++ 在超类构造函数中运行依赖于子类覆盖的大量变量的代码的正确方法是什么?
- 为什么 Clang++ 不在另一个静态库中运行全局对象构造函数?
- 如何声明对象但不运行构造函数
- c++和Qt,我如何在对象创建上运行构造函数或不同的函数来设置Ui