当前位置: 首页 > news >正文

[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情况

通过::作用域符号确定来源

 

虚基类解决二义性

相关文章:

  • 项目管理的核心是什么?
  • XUnity.AutoTranslator-Gemini——调用Google的Gemini API, 实现Unity游戏中日文文本的自动翻译
  • 案例-22.配置文件-@ConfigurationProperties
  • 【探寻C++之旅】第五章:模板
  • 解决华硕主板的Boot界面无法设置M.2的系统启动盘问题
  • Kafka Connect 数据格式转换器
  • Python装饰器根本写法
  • leetcode_位运算 190.颠倒二进制位
  • 8 SpringBootWeb案例(上): 查询【分页功能(分页插件)】、删除、新增、修改
  • 第三章 组件(6)- 事件处理
  • 设计模式 之 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)(C++)
  • centos服务器巡检脚本
  • Windows逆向工程入门之字符串类型解析与拓展
  • C语言预处理学习笔记
  • Docker Desktop 入门教学
  • python组备赛笔记(基础篇)
  • 从零到一:构建现代 React 应用的完整指南
  • Netty入门详解
  • halcon机器视觉深度学习对象检测,物体检测
  • 自学FOC系列分享--SVPWM和clark 逆变换及代码实战
  • 中法共创《海底两万里》,演员保剑锋重回戏剧舞台演船长
  • 亚振家居控制权将变更:济南域潇集团实控人成新控股股东
  • 民生访谈|公共数据如何既开放又安全?政务领域如何适度运用人工智能?
  • 农贸美学、业态再构、智能管理,今天的菜市场不止有菜
  • 由重商主义观察世界现代化历程
  • 四川公布一起影视盗版案例:1个网站2人团伙盗售30多万部