继承是面向对象的基本特征之一,通过继承机制,可以在已有的类的基础上建立新类,新类可以继承已有类的属性和行为,也可以修改已有类的属性和行为,或者增加新的属性和行为以满足自身特殊的需要。
1.继承的方式
- 公有继承(public):基类中的公有成员被继承后在派生类中仍然是公有的,基类中受保护的成员被继承后在派生类中仍然是受保护的。
- 受保护继承(protected):基类中公有成员和受保护成员被继承后在派生类中是受保护的。
- 私有继承(private):基类中的公有成员和受保护成员被继承后是私有的。
- 对于基类中的私有成员,不管以哪种方式继承,派生类中成员函数都不能直接访问,而只能通过定义与基类中的其他公有成员函数或受保护成员函数去访问。
2.重定义(overriding)基类中的函数
//A.h
#ifndef __A__H__
#ifdef __A__H__
#include <iostream>
using namespace std;
class A{
public:
A(){}
~A(){}
void print()
{
cout << "base class A" << endl;
}
};
#denif
//B.h
#ifndef __B__H__
#ifdef __B__H__
#include "A.h"
class B : public A{
public:
B(){}
~B(){}
//重定义基类函数print()
void print()
{
cout << "class B inherit from ";
A::print();
//基类中的被重定义的函数只能通过基类名通过作用运算符(::)方式调用
}
};
#endif
//main.cpp
#include "B.h"
int main()
{
B b;
b.print();
//结果为:
//class B inherit from base class A
return 0;
}
3.派生类和基类的转换
- 派生类继承了基类中的定义的所有属性和行为,因此可以把派生类对象当做基类对象处理,如类B继承自类A;
B b;
A a = b; //把派生类对象b赋值给基类对象a
- 派生类中定义了基类中没有的方法和属性,因此不能把基类对象当做派生类对象处理。