主页 > 其他  > 

[NKU]C++基础课(四)补充:继承

[NKU]C++基础课(四)补充:继承

继承与派生(本文视频)半个小时精通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++基础课(四)补充:继承