继承总结:
1、基类和派生类
继承的语法形式如下:
class 派生类名 : 基类名表
{
数据成员和成员函数声明
};
基类名表构成:访问控制 基类名
访问控制有3类:1)、public公有继承 2)、private私有继承 3)、protected保护继承
2、访问控制
一个派生类公有继承一个基类时,基类中所有公有成员(由public定义的数据成员或成员函数)成为派生类的公有(public)成员,基类中所有保护成员(由protected定义的数据成员或成员函数)成为派生类的保护(protected)成员。
一个派生类私有继承一个基类时,基类中所有公有成员和保护成员同时成为派生类的私有(private)成员。
一个派生类保护继承一个基类时,基类中所有公有成员和保护成员同时成为派生类的保护(protected)成员。
3、重名成员
1)、派生类生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽(hide)了基类的同名成员
2)、在派生类中使用基类的同名成员,显式地使用类名限定符:类名::成员
例:
using namespace std ;
class B
{ public:
static void Add() { i++ ; }
static int i;
void out() { cout<<"static i="<<i<<endl; }
};
int B::i=0;
class D : private B
{ public:
void f()
{ i=5;
Add();
B::i++;
B::Add();
}
};
int main()
{ B x; D y;
x.Add();
x.out();//i=1
y.f();
cout<<"static i="<<B::i<<endl;//i=8
cout<<"static i="<<x.i<<endl;//i=8
//cout<<"static i="<<y.i<<endl;
4、基类的初始化
1)、在创建派生类对象时用指定参数调用基类的构造函数来初始化派生类继承基类的数据
2)、派生类构造函数声明:派生类构造函数(变元表):基类(变元表),数据成员1(变元表),…,数据成员n(变元表);
3)、构造函数执行顺序:基类→对象成员→派生类
例:
#include<iostream>
using namespace std;
class base
{
public:
int x;
base(int i):x(i){}
};
class derived:public base
{
int a;
public:
derived(int j):a(j*10),base(2)
{
cout<<x<<" "<<a<<endl;
}
};
int main()
{
derived d(1);//程序运行结果:2 10
}
5、赋值兼容规则
1)、赋值兼容规则指在程序中需要使用基类对象的任何地方,都可以用公有派生类的对象来替代。
2)、在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。
3)、一个派生类对象也是一个基类对象,一个基类对象可派上用场的地方,派生类对象一样可派上用场。反之则不然。
6、多继承
1)、一个类有多个直接基类的继承关系称为多继承
2)、多继承声明语法:
class 派生类名:访问控制 基类名1,访问控制 基类名2,…,访问控制 基类名n
{
数据成员和成员函数声明
};