作为一名自学C++的小白,第一次听说面向对象的程序开发这个名词的时候还是很懵逼。在近两个月的学习中,我渐渐地理解了面向对象的程序的开发。以及在学习过程中重点,类!类的继承与派生这个内容对于面向对象的程序开发我认为在程序开发的过程中提高了程序的可移植性,老师说这部分内容要重点领会面对对象的程序开发的思维。好了废话不多说了,开始一个小小的总结。
---------------------------------------------------- 我是分割线---------------------------------------------------------------
继承与派生是同一过程从不同的角度看
保持已有类的特性而构造新类的过程称为继承
在已有类的基础上新增自己的特性而产生新类的过程称为派生。
---------------------------------------------------- 我是分割线---------------------------------------------------------------
语法:
单继承:
class 派生类名:派生方式 基类名
{成员声明;
}
class Derived: public Base
{
public:
Derived ();
~Derived ();
};
多继承:
class 派生类名:继承方式1 base1,继承方式2 base2{
成员声明;}
---------------------------------------------------- 我是分割线---------------------------------------------------------------
继承方式:
公有继承(public):
基类的public和protected成员在派生类中访问属性不变。而private不能直接被访问;
派生类成员函数可以访问基类public和protected,不可直接访问private成员;
派生类对象只能直接访问基类的public;
私有继承(private):
基类的public和protect成员以private的方式出现的派生类中,
基类private成员不能被直接访问;
派生类的成员函数只能访问基类public和protected成员;不能直接访问基类private成员函数;
派生 类对象不能访问基类的任何成员函数;
保护继承(protected):
基类的public和protect成员 以protected的方式出现的派生类中,基类private不能直接被访问;
派生类的成员函数只能访问基类public和protected成员;不能直接访问基类private成员函数;
派生 类对象不能访问基类的任何成员函数;
---------------------------------------------------- 我是分割线---------------------------------------------------------------
类型转换
- 公有派生类对象可以被当作基类的对象使用,反之则不可。
- 派生类的对象可以隐含转换为基类对象;
- 派生类的对象可以初始化基类的引用;
- 派生类的指针可以隐含转换为基类的指针。
- 通过基类对象名、指针只能使用从基类继承的成员。
#include <iostream>
using namespace std;
class Base1 { //基类Base1定义
public:
void display() const {
cout << "Base1::display()" << endl;
}
};
class Base2: public Base1 { //公有派生类Base2定义
public:
void display() const {
cout << "Base2::display()" << endl;
}
};
class Derived: public Base2 { //公有派生类Derived定义
public:
void display() const {
cout << "Derived::display()" << endl;
}
};
void fun(Base1 *ptr) { //参数为指向基类对象的指针
ptr->display(); //"对象指针->成员名"
}
int main() { //主函数
Base1 base1; //声明Base1类对象
Base2 base2; //声明Base2类对象
Derived derived; //声明Derived类对象
fun(&base1); //用Base1对象的指针调用fun函数
fun(&base2); //用Base2对象的指针调用fun函数
fun(&derived); //用Derived对象的指针调用fun函数
return 0;
}
上面这个例子告诉我们通过派生类对象可以调用基类成员函数。(通过虚基类可以实现函数的公用)
---------------------------------------------------- 我是分割线---------------------------------------------------------------