繁体   English   中英

继承类的构造函数没有运行

[英]Inherited class's constructor is not running

我有 3 个班级,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

创建 object B 时,一切正常。

但是在创建 object C 时,class A (var x) 的默认值仍然是 0(默认值)。

我在 class C 的构造函数中添加了调试行,但我没有在日志中看到它,看起来构造函数没有运行。 当只创建 object C 时,我在 class B 的构造函数中做了同样的事情,我也没有看到任何调试打印。

此代码没有任何编译错误。 构建成功完成。

以下是合法且有效的 C++。 您的代码不合法 C++。

我在 class 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;   
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM