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, ...
{
    ...
}
相关推荐
卷无止境10 小时前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境11 小时前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴1 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
卷无止境3 天前
C++ 的Eigen 库全解析
c++
卷无止境3 天前
现代 C++特性大盘点:一门脱胎换骨的老语言
c++·后端
郝学胜_神的一滴3 天前
CMake 27:缓存变量的特性、语法、类型与实操全解
c++·cmake
博客18005 天前
酷宝的使用方法,超好用的免费界面库,C++、MFC可用
c++·mfc·界面库·库来帮·酷宝
郝学胜_神的一滴5 天前
CMake 026:属性体系精讲、四大作用域全解 & 实战代码落地
c++·cmake
众少成多积小致巨6 天前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
clint45610 天前
C++进阶(1)——前景提要
c++