[NKU]C++基础课(四)补充:继承
- 其他
- 2025-08-25 07:27:01
![[NKU]C++基础课(四)补充:继承](/0pic/pp_28.jpg)
继承与派生(本文视频)半个小时精通C++继承和多态性!_哔哩哔哩_bilibili 龚老师学习网站(这个也很清楚):C++ 继承 | 菜鸟教程
雇员与经理例子
class Employee{ string name; Date birthday; string dept; } class Manager{ Employee emp; int level; ... }Manager由Employee派生 Employee是一个基类,Manager包含Employee所有成员,以及自己的成员 派生类从基类继承了各种成员的关系被称为继承
class Manager:public Employee{ int level; ... }基类是对派生类的抽象,派生类是对基类的具体化
定义派生类的格式
class<派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,...,<继承方式n><基类名n> { <派生类新定义成员> };派生类的构成 基类继承下来的私有成员,派生类不能直接访问 基类继承下来的公有成员和保护乘员,派生类能直接访问
第一个例子
#include <iostream> using namespace std; //Point class Point{ public: void InitPoint(int x, int y); //初始化位置 void Move(int xOff, int yOff); //移动量 int GetX(){return X;} //内联函数 得到位置 int GetY(){return Y;} private: int X,Y; }; void Point::InitPoint(int x, int y){ X=x; Y=y; } void Point::Move(int xOff, int yOff){ X += xOff; Y += yOff; } //Rectangle class Rectangle : public Point { public: void InitRectangle(int x, int y, int w, int h); int GetW(){return W;} int GetH(){return H;} private: int W,H; }; void Rectangle::InitRectangle(int x, int y, int w, int h){ InitPoint(x,y); W=w; H=h; } int main(){ Rectangle rect; rect.InitRectangle(2,3,10,20); rect.Move(3,2); cout<<rect.GetX()<<','<<rect.GetY()<<',' <<rect.GetW()<<','<<rect.GetH()<<','<<endl; return 0; }
5,5,10,20
Point派生Rectangle派生Square
class Square:public Rectangle{ public: void fun(){Move(3,2);} }第二个例子
因为objB对象属于基类Base,其中data是protcted类型因此不能访问
Base类的对象那个objB不能访问data 但是 Derived类的对象objD.fun()可以访问data
构造函数和析构函数比较麻烦,新增成员和派生成员都需要初始化
构造函数
例子
构造函数顺序:先基类后新增
析构函数
后构造的先析构
多继承中的二义性问题
一般是A情况
通过::作用域符号确定来源
虚基类解决二义性
[NKU]C++基础课(四)补充:继承由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“[NKU]C++基础课(四)补充:继承”