carysu@126.com

carysu@126.com
posts - 11, comments - 0, trackbacks - 0, articles - 0

派生类构造函数举例

Posted on 2011-07-17 20:47 susu 阅读(616) 评论(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*/

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理