C++零碎记录(九)

发布于:2023-09-14 ⋅ 阅读:(97) ⋅ 点赞:(0)

15. 继承

15.1 继承简洁

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

② 定义类时,下级别的成员除了拥有上一级的共性,还有自己的特性。这个时候,就可以考虑利用继承技术,减少重复代码。

15.2 普通实现

#include <iostream>
using namespace std;
#include<string>

//打印输出类
class Java
{
public:
    void header()
    {
        cout << "首页、公开课、登陆、注册...(公共头部)" << endl;
    }
    void footer()
    {
        cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
    }
    void left()
    {
        cout << "Java、Python、C++....(公共分类列表)" << endl;
    }
    void content()
    {
        cout << "Java学科视频" << endl;
    }
};

class Python
{
public:
    void header()
    {
        cout << "首页、公开课、登陆、注册...(公共头部)" << endl;
    }
    void footer()
    {
        cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;
    }
    void left()
    {
        cout << "Java、Python、C++....(公共分类列表)" << endl;
    }
    void content()
    {
        cout << "Python学科视频" << endl;
    }
};

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

void test01()
{
    cout << "Java下载视频页面如下:" << endl;
    Java ja;
    ja.header();
    ja.footer();
    ja.left();
    ja.content();

    cout << "........................" << endl;
    cout << "Python下载视频页面如下:" << endl;
    Python py;
    py.header();
    py.footer();
    py.left();
    py.content();

    cout << "........................" << endl;
    cout << "C++下载视频页面如下:" << endl;
    CPP cpp;
    cpp.header();
    cpp.footer();
    cpp.left();
    cpp.content();
}

int main()
{
    test01();
    
    system("pause");

    return 0;

}

运行结果:

  • Java下载视频页面如下:
  • 首页、公开课、登陆、注册...(公共头部)
  • 帮助中心、交流合作、站内地图...(公共底部)
  • Java、Python、C++....(公共分类列表)
  • Java学科视频
  • ........................
  • Python下载视频页面如下:
  • 首页、公开课、登陆、注册...(公共头部)
  • 帮助中心、交流合作、站内地图...(公共底部)
  • Java、Python、C++....(公共分类列表)
  • Python学科视频
  • ........................
  • C++下载视频页面如下:
  • 首页、公开课、登陆、注册...(公共头部)
  • 帮助中心、交流合作、站内地图...(公共底部)
  • Java、Python、C++....(公共分类列表)
  • C++学科视频
  • 请按任意键继续. . .

15.3 继承实现

#include <iostream>
using namespace std;
#include<string>

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

// 继承的好处:减少重复代码
// 语法:class 子类:继承方式 父类
// 子类 也称为 派生类
// 父类 也称为 基类

//Java页面
class Java:public BasePage   //继承了BasePage,把BasePage里面的内容全部拿到手了
{
public:
    void content()
    {
        cout << "Java学科视频" << endl;
    }
};

//Python页面
class Python :public BasePage   //继承了BasePage,把BasePage里面的内容全部拿到手了
{
public:
    void content()
    {
        cout << "Python学科视频" << endl;
    }
};

//C++页面
class CPP :public BasePage   //继承了BasePage,把BasePage里面的内容全部拿到手了
{
public:
    void content()
    {
        cout << "CPP学科视频" << endl;
    }
};

void test01()
{
    cout << "Java下载视频页面如下:" << endl;
    Java ja;
    ja.header();
    ja.footer();
    ja.left();
    ja.content();

    cout << "........................" << endl;
    cout << "Python下载视频页面如下:" << endl;
    Python py;
    py.header();
    py.footer();
    py.left();
    py.content();

    cout << "........................" << endl;
    cout << "C++下载视频页面如下:" << endl;
    CPP cpp;
    cpp.header();
    cpp.footer();
    cpp.left();
    cpp.content();
}

int main()
{
    test01();
    
    system("pause");

    return 0;

}

运行结果:

  • Java下载视频页面如下:
  • 首页、公开课、登陆、注册...(公共头部)
  • 帮助中心、交流合作、站内地图...(公共底部)
  • Java、Python、C++....(公共分类列表)
  • Java学科视频
  • ........................
  • Python下载视频页面如下:
  • 首页、公开课、登陆、注册...(公共头部)
  • 帮助中心、交流合作、站内地图...(公共底部)
  • Java、Python、C++....(公共分类列表)
  • Python学科视频
  • ........................
  • C++下载视频页面如下:
  • 首页、公开课、登陆、注册...(公共头部)
  • 帮助中心、交流合作、站内地图...(公共底部)
  • Java、Python、C++....(公共分类列表)
  • CPP学科视频
  • 请按任意键继续. . .

16. 三种继承改变权限

① 继承的语法:class 子类:继承方式 父类

② 继承方式一共有三种:

1. 公共继承
2. 保护继承
3. 私有继承

③ 不同的继承方式,父类中的变量被继承后,权限相应的得到了改变,如下图所示。

#include <iostream>
using namespace std;
#include<string>

//打印输出类
class Base1
{
public:
    int m_A;
protected:
    int m_B;
private:
    int m_C;
};

//公共继承
class Son1:public Base1
{
public:
    void func()
    {
        m_A = 10; //父类中的公共权限成员 到子类中依然是公共权限
        m_B = 10; //父类中的保护权限成员 到子类中依然是保护权限
        //m_C = 10; //父类中的私有权限成员 子类访问不到

    }
};

void test01()
{
    Son1 s1;
    s1.m_A = 100;  //公共权限,类内能访问,类外也能访问
    //s1.m_B = 100;  //保护权限,类内能访问,类外不能访问
}

//保护继承
class Son2:protected Base1
{
public:
    void func()
    {
        m_A = 10; //父类中的公共权限成员 到子类中变为保护权限
        m_B = 10; //父类中的保护权限成员 到子类中依然是保护权限
        //m_C = 10; //父类中的私有权限成员 子类访问不到

    }
};


void test02()
{
    Son2 s2;
    //s2.m_A = 100;  //保护权限,类内能访问,类外不能访问
    //s2.m_B = 100;  //保护权限,类内能访问,类外不能访问
}

//私有继承
class Son3:private Base1
{
public:
    void func()
    {
        m_A = 10; //父类中的公共权限成员 到子类中变为私有权限
        m_B = 10; //父类中的保护权限成员 到子类中变为私有权限
        //m_C = 10; //父类中的私有权限成员 子类访问不到

    }
};

void test03()
{
    Son3 s3;
    //s3.m_A = 100;  //私有权限,类内能访问,类外不能访问
    //s3.m_B = 100;  //私有权限,类内能访问,类外不能访问
}

int main()
{

    system("pause");

    return 0;

}

运行结果:

  • 请按任意键继续. . .

链接:https://www.zhihu.com/question/437657370/answer/1692846096

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到