C++语言构造函数继承问题

2025-03-21 14:46:57
推荐回答(4个)
回答1:

没有必须一致的说法。构造函数,是用于对本对象初始化。形式随意,没有必要与其它类保持相同。
例1.
class A{
public:
A(int m){printf("class A. m=%d\n",m);}
};
class B:public A{
B(int m,int n){printf("class B. m=%d. n=%d.\n",m,n);}
};
B obj(1,2);

回答2:

  1. 子类的构造函数
    1)隐式构造基类子对象
    2)显示构造基类子对象
    3)构造顺序:首先按照继承表的顺序,依次调用各个基类的构造函数,初始化子类对象中的基类子对象;其次按照声明的顺序,依次调用各个类类型成员变量相应类型的构造函数,初始化子类对象中的成员子对象;最后执行子对象构造函数中的代码。所有的子对象按照被构造的顺序,地址依次升高。


    //   A   公共基类(爷)
    //  /   \
    // B   C 中间子类(爹)
    //  \   /
    //   D   汇集子类(孙)

    #include
    using namespace std;
    class A {
    public:
        A (int data) : m_data (data) {
            cout << "A构造:" << this << endl;
        }
        int m_data;
    };
    class B : virtual public A {
    public:
        B (int data) : A (1234) {
            cout << "B构造:" << this << endl;
        }
        void set (int data) {
            m_data = data;
        }
    };
    class C : virtual public A {
    public:
        C (int data) : A (5678) {
            cout << "C构造:" << this << endl;
        }
        int get (void) const {
            return m_data;
        }
    };
    class D : public B, public C {
    public:
        D (int data) : B (data), C (data),
               A (data) {
            cout << "D构造:" << this << endl;
        }
    };
    int main (void) {
        D d (100);
        d.set (200);
        cout << d.get () << endl; // ?
        cout << sizeof (d) << endl;
        return 0;
    }


回答3:

class A
{
private:
int a,b;
public:
A();
A(int a,int b);

};
class B:public A
{
private:
int c,d;
B();
B(int a,int b,int c,int d);
................
};
A::A()
{
this->a=0;
this->b=0;
}
A::A(int a,int b)
{
this->a=a;
this->b=b;
}
B::B():A()//初始化a,b,c,d为0
{
this->c=0;
this->d=0;
}
B::B(int a,int b,int c,int d):A(a,b)//初始化a,b,c,d,创建对象的时候直接赋值
{
this->c=c;
this->d=d;
}

回答4:

嘛,构造函数是不能被继承
他只负责当前对象资源的构造