Posted on 2011-07-17 20:47
susu 阅读(615)
评论(0) 编辑 收藏 引用
1
2#include<iostream>
3#include <cmath>
4using namespace std;
5
6class B1 //基类B1,构造函数有参数
7{public:
8 B1(int i) {cout<<"constructing B1 "<<i<<endl;}
9};
10class B2 //基类B2,构造函数有参数
11{public:
12 B2(int j) {cout<<"constructing B2 "<<j<<endl;}
13};
14class B3 //基类B3,构造函数无参数
15{public:
16 //B3(){cout<<"constructing B3 *"<<endl;}
17 void B5(){cout<<"constructing B3 *"<<endl;}
18};
19
20class C: public B2, public B1, public B3
21{
22public: //派生类的公有成员
23 C(int a, int b, int c, int d):
24 B2(b),B1(a),memberB1(c),memberB2(d) {}
25 /**//*
26 说明:此处B3 类中没有参数,所以在此处不用对B3进行构造函数赋值操作,
27 这里出现的“:”后的定义必须在类的继承后面“:”中已经定义了
28 即B2和B1均继承了,不过B3虽然继承了,但是构造函数中没有值,所以就不用在这里多加说明
29 另外的memberB1(c),memberB2(d),但这种是对本类中的成员进行初始化操作。memberB1(c)
30 不过这里感觉会有点怪:
31 不是类似的 x = a;类的形式赋值。
32 */
33private: //派生类的私有对象成员
34 B1 memberB1;
35 B2 memberB2;
36 //B3 memberB3;
37 B3 t;
38};
39void main()
40{ C obj(1,2,3,4); }
41/**//*
42记住以下规定:
43当基类中声明有默认形式的构造函数或未声明构造函数时,派生类构造函数可以不向基类构造函数传递参数。
44若基类中未声明构造函数,派生类中也可以不声明,全采用缺省形式构造函数。
45当基类声明有带形参的构造函数时,派生类也应声明带形参的构造函数,并将参数传递给基类构造函数。
46
47
481. 调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左向右)。
492. 调用成员对象的构造函数,调用顺序按照它们在类中声明的顺序。
503. 派生类的构造函数体中的内容。
51
52派生类名::派生类名(基类1形参,基类2形参,基类n形参,本类形参):基类名1(参数), 基类名2(参数), 基类名n(参数),对象数据成员的初始化
53{
54 本类成员初始化赋值语句;
55};
56
57*/