没有必须一致的说法。构造函数,是用于对本对象初始化。形式随意,没有必要与其它类保持相同。
例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);
子类的构造函数
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;
}
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;
}
嘛,构造函数是不能被继承
他只负责当前对象资源的构造