继承类的构造函数未运行

Inherited class's constructor is not running

本文关键字:运行 构造函数 继承      更新时间:2024-04-28

我有三个类,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;   
}