C++之继承

继承是面向对象三大特性之一

有一些类与类之间存在特殊关系,例如下图中:

我们发现,定义这些类的时候,下级别的成员有上一级的共性,还有自己的特性。

这个时候我们就可以考虑用继承的方式减少重复的代码。

一,继承的基本语法

cpp 复制代码
class 子类 : 继承方式 父类
{
    ...
}

继承的好处

1.可以减少重复的代码。

2.在父类中体现共性,在子类中体现特性。

普通实现

cpp 复制代码
#include <iostream>

using namespace std;

class Java
{
public:
    void header()
    {
        cout << "首页,公开课,登录,注册...(公共头部)" << endl;
    }
    void footer()
    {
        cout << "帮助中心,交流合作,站内地图...(公共底部)" << '\n' << endl;
    }
    void left()
    {
        cout << "Java, Python, C++, ...(公共分类列表)" << endl;
    }
    void content()
    {
        cout << '\n' << "Java学习资料" << '\n' << endl;
    }
};

class CPP
{
public:
    void header()
    {
        cout << "首页,公开课,登录,注册...(公共头部)" << endl;
    }
    void footer()
    {
        cout << "帮助中心,交流合作,站内地图...(公共底部)" << '\n' << endl;
    }
    void left()
    {
        cout << "Java, Python, C++, ...(公共分类列表)" << endl;
    }
    void content()
    {
        cout << '\n' << "C++学习资料" << '\n' << endl;
    }
};

class Python
{
public:
    void header()
    {
        cout << "首页,公开课,登录,注册...(公共头部)" << endl;
    }
    void footer()
    {
        cout << "帮助中心,交流合作,站内地图...(公共底部)" << '\n' << endl;
    }
    void left()
    {
        cout << "Java, Python, C++, ...(公共分类列表)" << endl;
    }
    void content()
    {
        cout << '\n' << "Python学习资料" << '\n' << endl;
    }
};

void test01()
{
    Java ja;
    ja.header();
    ja.left();
    ja.content();
    ja.footer();
}

void test02()
{
    Python py;
    py.header();
    py.left();
    py.content();
    py.footer();
}

void test03()
{
    CPP cpp;
    cpp.header();
    cpp.left();
    cpp.content();
    cpp.footer();
}

int main()
{
    test01();
    test02();
    test03();
    return 0;
}

Result:

继承实现

cpp 复制代码
#include <iostream>

using namespace std;

class BasePage
{
public:
    void header()
    {
        cout << "首页,公开课,登录,注册...(公共头部)" << endl;
    }
    void footer()
    {
        cout << "帮助中心,交流合作,站内地图...(公共底部)" << '\n' << endl;
    }
    void left()
    {
        cout << "Java, Python, C++, ...(公共分类列表)" << endl;
    }
};

class Java : public BasePage
{
public:
    void content()
    {
        cout << '\n' << "Java学习资料" << '\n' << endl;
    }
};

class CPP : public BasePage
{
public:
    void content()
    {
        cout << '\n' << "C++学习资料" << '\n' << endl;
    }
};

class Python : public BasePage
{
public:
    void content()
    {
        cout << '\n' << "Python学习资料" << '\n' << endl;
    }
};

void test01()
{
    Java ja;
    ja.header();
    ja.left();
    ja.content();
    ja.footer();
}

void test02()
{
    Python py;
    py.header();
    py.left();
    py.content();
    py.footer();
}

void test03()
{
    CPP cpp;
    cpp.header();
    cpp.left();
    cpp.content();
    cpp.footer();
}

int main()
{
    test01();
    test02();
    test03();
    return 0;
}

Result:

二,继承方式

  • 公共继承
  • 保护继承
  • 私有继承

其都不能访问父类中 private 的信息。

三,继承同名成员处理方式

  • 子类对象可以直接访问到子类中同名成员
  • 子类对象加作用域可以访问到父类同名成员
  • 当子类与父类拥有同名的成员函数,子类会隐藏父类中同名成员函数,加作用域可以访问到父类中同名函数

四,多继承语法

C++允许一个类继承多个类

语法如下:

cpp 复制代码
class 子类 : 继承方式 父类1, 继承方式 父类2, ...
{
    ...
}
相关推荐
doll ~CJ15 分钟前
基于QVTKOpenGLNativeWidget的三维点云可视化实现
c++·qt·软件开发·三维点云可视化
42fourtytoo1 小时前
天津大学智算2026预推免机试第二批题目及代码c++
开发语言·c++·面试
子豪-中国机器人2 小时前
枚举算法和排序算法能力测试
开发语言·c++·算法
1白天的黑夜12 小时前
栈-844.比较含退格的字符串-力扣(LeetCode)
c++·leetcode·
林夕忆梦_猫3 小时前
初识C++
开发语言·c++
chxin140163 小时前
openCV3.0 C++ 学习笔记补充(自用 代码+注释)---持续更新 四(91-)
c++·opencv·计算机视觉
lightqjx3 小时前
【C++】string类 模拟实现
java·开发语言·c++
青草地溪水旁3 小时前
C/C++ 标准库中的 `strspn` 函数
c语言·c++
minji...3 小时前
C++ list的模拟实现
开发语言·c++·list
零点零一4 小时前
`vcpkg` 微软开源的 C/C++ 包管理工具的使用和安装使用spdlog
c语言·c++·microsoft