1、派生类的概念
(1)通过已有的类来建立新类的过程,叫做“类的派生”,原来的类叫做“基类”,新建立的类则叫做“派生类”。
(2)派生类中定义了与基类同名的成员或成员函数时,在派生类对象访问这个函数时,访问的是派生类的,这种现象叫“覆盖”,也叫重写,也叫同名隐藏,即隐蔽了基本的同名函数
2、派生类的特点
(1)从类的成员角度看,派生类自动地将基类的所有成员作为自己的成员,这叫做“继承”。
(2)基类和派生类又可以分别叫做“父类”和“子类”,有时也称为“一般类”和“特殊类”。
(3)从一个或多个以前定义的类 (基类) 产生新类的过程称为派生这个新类称为派生类。
(4)派生的新类同时也可以增加或者重新定义数据和操作,这就产生了类的层次性。
(5)类的继承是指派生类继承基类的数据成员和成员函数。
(6)继承常用来表示类属关系,不能将继承理解为构成关系。
3、派生类的定义格
派生类的定义格式如下:
class 派生类名: 继承方式 基类名
{
派生类新定义成员;
}
4、继承方式
继承方式说明符指明如何控制基美成员在派生美中的访问属性,通常由3种方式,分别是public (公有继)、private (私有继)和protected(保护维承)->son类不可继承。
【示例】派生类改变基类成员的访问权限
#include <iostream>
using namespace std;
class BaseClass
{
public:
int vl, v2;
BaseClass()
{
v1 = 1; //公有访问权限
v2 =1;
}
int temp1(){
}//公有访问权限
};
class DerivedClass :public BaseClass
{
int vl;
int temp1() {
}
public:
DerivedClass()
{
v1=10;
}
void printv()
{
cout << "vl=" << vl << endl;
cout2"Base.vl=" << BaseClass::v1 << endl;
}
};
int main()
{
BaseClass bc;
DerivedClass dc;
dc.printv();
return 0;
}
【运行结果】
v1=10
Base,v1=1
5、继承关系的特殊性
继承关系的特殊性:派生类不能继承基类的友元函数,但基类的成员函数是其他类的友元函数时,是可以被继承的。
a.如果基类有友元类或友元函数,则其派生类不会因继承关系而也有此友元类或友元函数
b.如果基类是某类的友元,则这种友元关亲是被继承的。
【示例】派生类继承了友元函数
#include<iostream>
using namespace std;
class another;
Class Base
{
private:
float X;
public:
void print(const another &K) ;
};
class Derived:public Base
{
private:
float y;
};
class another
{
private:
int aaa ;
public:
another ()
{
aaa=100;
}
friend void Base::print(const another &K); //基类的成员函数声明为本类的友元
};
void Base::print(const another &K)
{
cout<<"Base:"<<K.aaa<<end1; //可以访问私有成员变量
}
int main()
{
Base a;
Derived d;
another ano;
a.print