C++学习笔记---面向对象编程

一、类
1、构造函数和构造函数初始化列表

对非内置类型成员变量,为了避免两次构造,推荐使用类构造函数初始化列表。但有的时候必须用带有初始化列表的构造函数:
1.成员类型是没有默认构造函数的类。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。
2.const成员或引用类型的成员。因为const对象或引用类型只能初始化,不能对他们赋值。

初始化数据成员与对数据成员赋值的含义是什么?有什么区别?
首先把数据成员按类型分类并分情况说明:
1.内置数据类型,复合类型(指针,引用)
在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的
2.用户定义类型(类类型)
结果上相同,但是性能上存在很大的差别。因为类类型的数据成员对象在进入函数体前已经构造完成,也就是说在成员初始化列表处进行构造对象的工作,调用构造函数,在进入函数体之后,进行的是对已经构造好的类对象的赋值,又调用个拷贝赋值操作符才能完成(如果并未提供,则使用编译器提供的默认按成员赋值行为)

二、面向对象编程
1、C++支持多重继承,即一个类可以派生于多个基类;

2、动态绑定
第一、只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数,非虚函数不进行动态绑定;
第二、必须通过基类类型的引用或指针进行函数进行调用;

例如:在基类中book函数不是virtual,在派生类中即使定义了自己的book函数版本,在派生类中调用book也是调用基类中的版本;

3、访问控制和继承
在基类中,public和private标号具有普通含义:用户代码可以访问类的public成员而不能访问private成员,private成员只能由基类的成员和友元访问。派生类对基类的public和private成员的访问权限与程序中凭单其它部分一样:它可以访问public成员而不能访问privat成员
有时作为基类的类具有一些成员,它希望允许派生类访问但仍禁止其它用户访问这些成员。对于这样的成员应使用受保护的访问标号(protected),protected成员可以被派生类对象访问但不能被该类型的普通用户访问。

4、公用、私有和受保护的继承:
如果是公用继承,基类成员保持自己的访问级别:基类的public成员为派生类的Public成员,基类的protected成员为派生类的protected成员。
如果是受保护继承,基类的Public和protected成员在派生类中为protected成员。
如果是私有继承,基类的所有成员在派生类中为private成员
class Public_devived : public Base
{
};
class Private_devived : public Base
{
};

5、基类到派生类的转换:
当基类指针或引用实际绑定到派生类对象时,从基类到派生类的转换也存在限制。在这种情况下,如果知道从基类到派生类的转换是安全的,就可以使用static_cat强制编译器进行转换。或者可以用dynamic_cast申请在运行时进行检查。
构造函数和复制控制成员不能继承,每个类定义自己的构造函数和复制控制成员。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章