目录
一、单一继承
1.定义派生类构造函数的形式:
类外:派生类名::派生类名(参数表0):基类名(参数表){……}
类内:派生类名(参数表0):基类名(参数表){……}
2.当定义一个派生类对象时:
1)首先调用基类构造函数
2)然后执行派生类构造函数
析构函数则和此顺序相反
二、派生类的访问权限
1. 类的继承访问特性
protect修饰的成员不能被外界所访问但是能被子类直接访问
三、二义性及其支配规则
1.消除二义性:
(1)作用域分辨符:“ :: ”
(2)使用成员名限定:在成员中使用域作用符,语法为 类名 :: 标识符
示例:
class A{
public:
void f(){cout<<"A.f"<<endl;}
}
class B{
public:
void f(){cout<<"B.f"<<endl;}
void g(){cout<<"B.g"<<endl;}
}
class C:public A,public B{
public:
void g(){cout<<"C.g"<<endl;}
void h(){cout<<"C.h"<<endl;}
void h0(){f()} //有二义性,不知道调用A还是B的
void h1(){A::f()} //使用作用域限定符指明A::f()
void h2(){B::f()} //使用作用域限定符指明B::f()
}
void main(){
C c1;
C *c2 = new C;
c1.f(); //仍有二义性,不知道调用A还是B的
c1.A::f(); //对象成员名限定,A的f()
c2->B::f(); //对象指针成员名限定,B的f()
}
2.友元与派生类
友元声明与访问控制无关;
友元关系是无等级的。
四、继承和派生的典型问题
1.派生类没有使用基类的数据成员
2.派生类支配基类的同名函数
3.避免二义性(作用域分辨运算符::和成员名来限定)
4.友元和派生类
五、历年真题
1. 派生类的主要用途是可以定义其基类中___________。
【答案】不具有的成员