类成员初始化问题 09.2.23
2009-02-23 10:01
176 查看
由于初始化顺序是从基类到派生类的
基类的构造函数负责初始化基类与派生类的构造数负责初始化派生类,
在MFC中N层继承类库中,都是不同层中的类负责初始化自己本身和调用上一级构造函数进行初始化
如何在派生类初始化从基类中继承来的protected成员和基类的private成员呢?
答案是:
在派生类的构造函数间接的调用基类构造函数来实现,派生类的初始化列表必须明确指出基类的初始化式
1.无参数的构造函数
格式:构造函数名():(基类构造函数(),派生类成员d1(值),d2(值),n(值){}
2.有参数的构造函数
格式:
构造函数名(基类参数...派生类参数...)
:(基类构造(b1(参数),b2(参数)),派生类成员d1(参数),d2(参数),n(参数){}
class bulk_item: public item_base{
public:
//1.派生类无参数的构造函数
bulk_item():(item_base(),int_qty(0),discount(0.0){}
//2.派生类有参数的构造函数
bulk_item(std::string& book=/"/",double s_price=0.0,int qty=0,double dis=0.0)//函数参数
:item_base(book,s_price),int_qty(0),discount(0.0){} //初始化列表
private:
int min_qty;
double discount;
};
3.设计指导
3.1初始化方式选择:
无参数的构造函数:主要用初始化列表来初始化成员变量
有参数的构造函数:默认形参+初始化列表的构造函数
3.2派生类的初始化顺序
由于初始化顺序是从基类到派生类的,在初始化列表中应该先初始化基类,然后再是派生类本身
如果要求程序高性能,使用初始列表是C++的生产首选,对于习惯于C的程序员,在函数体初始化成员也是可行。
基类的构造函数负责初始化基类与派生类的构造数负责初始化派生类,
在MFC中N层继承类库中,都是不同层中的类负责初始化自己本身和调用上一级构造函数进行初始化
如何在派生类初始化从基类中继承来的protected成员和基类的private成员呢?
答案是:
在派生类的构造函数间接的调用基类构造函数来实现,派生类的初始化列表必须明确指出基类的初始化式
1.无参数的构造函数
格式:构造函数名():(基类构造函数(),派生类成员d1(值),d2(值),n(值){}
2.有参数的构造函数
格式:
构造函数名(基类参数...派生类参数...)
:(基类构造(b1(参数),b2(参数)),派生类成员d1(参数),d2(参数),n(参数){}
class bulk_item: public item_base{
public:
//1.派生类无参数的构造函数
bulk_item():(item_base(),int_qty(0),discount(0.0){}
//2.派生类有参数的构造函数
bulk_item(std::string& book=/"/",double s_price=0.0,int qty=0,double dis=0.0)//函数参数
:item_base(book,s_price),int_qty(0),discount(0.0){} //初始化列表
private:
int min_qty;
double discount;
};
3.设计指导
3.1初始化方式选择:
无参数的构造函数:主要用初始化列表来初始化成员变量
有参数的构造函数:默认形参+初始化列表的构造函数
3.2派生类的初始化顺序
由于初始化顺序是从基类到派生类的,在初始化列表中应该先初始化基类,然后再是派生类本身
如果要求程序高性能,使用初始列表是C++的生产首选,对于习惯于C的程序员,在函数体初始化成员也是可行。
相关文章推荐
- c++类几个特殊成员的初始化问题
- C++成员变量的初始化顺序问题
- 局部变量与成员变量的同名问题&显示初始化
- 局部变量与成员变量的同名问题&显示初始化
- C++成员变量的初始化顺序问题
- Java中成员变量和构造方法谁先初始化的问题
- (已解决一部分)哪位对类的构造函数内的成员变量的初始化过程比较熟悉~帮忙看个问题
- java中一个值得注意的问题---类成员初始化与变量初始化的区别
- java开发转php遇到的问题-- 初始化成员变量报错问题
- C++成员变量的初始化顺序问题
- C++中关于类中常数静态成员初始化的问题
- [转] boost库的Singleton的实现以及static成员的初始化问题
- 类内const static(static const)成员变量初始化问题
- 静态变量、实例变量初始化时机,以及子类隐藏父类成员时,创建子类对象的一些问题
- 构造函数中成员变量初始化顺序问题
- 常成员变量数组初始化的问题
- 局部变量与成员变量的同名问题&显示初始化
- 7 面向对象(成员变量和局部变量的区别,类作为形式参数的问题,匿名对象,封装,private关键字,this关键字,构造方法,类的初始化过程,static关键字)
- C++类成员变量初始化顺序问题