C++ 个人学习疑难易错解惑 笔记 2

1:当派生类是多继承时,若两个以上的基类有同名成员,而派生类中无同名成员,通过派生类对象引用基类基类同名成员时,将造成二义性。二义性的检测在访问权限检测之前(此处访问权限是指各个类中的权限);若想使用基类的同名成员函数(或数据成员),有两种方式:

      1>派生类对象调用时可以在成员函数之前加上类的作用域     类名::    ,即类名::成员函数。

      2>赋值兼容原则:即定义基类指针指向派生类对象的地址,则该指针永远只能调用基类的成员函数和数据成员。

注意:单一继承不存在调用二义性

           基类指针可以指向基类对象,也可以指向派生类对象;但派生类指针只能指向派生类对象。

          多继承是指从派生类往父类看的,

2:构造函数

类的构造函数无返回值类型,可以重载;当定义对象时,先分配单元,再调用构造函数;

定义类的引用时,将会调用类的拷贝构造函数,注意:定义类的引用对象时一定要初始化。

调用构造函数顺序:先调基类构造--->子对象构造--->派生类构造

只有定义对象的时候才会调用构造或者拷贝构造函数。

拷贝构造函数:与类名同名,只有一个形参,且只能是类的对象的引用。eg:  类名(类名   &  对象名)

3:析构函数

不能重载,无返回值类型,无形参,用于释放对象单元;C++中用new分配的单元(用delete释放,再让指针指向NULL,避免成为野指针)

析构函数的调用顺序与构造函数的调用顺序完全严格相反。

4:就近原则

就近原则:若基类和派生类出现同名成员时,则基类对象只能调用积累的同名成员,派生类对象优先调用派生类的同名成员函数。

就近原则只用于派生类

5:访问类的私有

只能通过类自己的成员函数或者自己的友元函数来访问。

6:继承路径的二义性

继承路径的二义性与前面的调用二义性是不同的。

继承路径二义性:1>当一个基类派A 生两个或以上的派生类(如B、C)时,系统会为每个派生类生成一个基类副本

                             2>如果派生类中没有定义基类的同名成员函数

                             3>两个派生类派生一个最派生D

结果:通过最派生类D对象调用访问基类A的成员时,系统无法确定沿着哪条继承路线访问基类A,因为此时路线有两条(即ABD、ACD)

解决方法:将基类A声明为虚基类,此时派生多个派生类,系统将不会为每个派生类产生基类副本。

虚基类的构造只能调用一次,即其中一个派生类调用虚基类的构造之后,其他派生类将不再调用虚基类的构造。

派生类调用构造顺序:先调基类构造(此处先调虚基类构造,再调非虚基类构造)--->再调子对象构造--->派生类自己的构造

7:多态

多态:一个函数名称实现不同的结果(即对一个同名函数的调用,系统将产生不同的结果)

函数重载属于静态多态。

猜你喜欢

转载自blog.csdn.net/czy47/article/details/81215205