保护继承 —— 学生信息类

本文介绍了C++中保护继承的概念,其降低了父类公有成员的访问性。通过示例展示了如何在子类中使用get和set函数访问父类成员,并给出了一个实际应用,如设计学生信息类,实现Set和PrintSID函数。
摘要由CSDN通过智能技术生成
保护继承

保护继承相对于公有继承,访问性有所降低,父类的公有成员在子类中变成了保护成员,也就无法在外部通过一个对象访问父类成员了,但是对于这个子类的子类仍然是可见的(因为可见性只是降到了 protected )。

如果要保护继承一个类,只需继承时在类名前面加上 protected 关键字即可。

例如:

 
  1. class Base
  2. {
  3. public:
  4. int A;
  5. };
  6. class D1 : protected Base // 保护继承 Base 类
  7. {
  8. /* …… */
  9. };
  10. int main()
  11. {
  12. D1 d;
  13. d.A = 10; // 尝试访问 D1 的基类 Base 中的 A 成员,但是由于是保护继承,所以这样做是错误的。
  14. }

在保护继承中如果想通过子类访问父类的成员,那就只能在子类中增加一些 get 、set 函数来实现了。

例如:

 
  1. /* Base类的定义同上 */
  2. class D1 : protected Base
  3. {
  4. public:
  5. void SetA(int a); // 设置 Base 类中 A 的值
  6. int GetA(); // 获取 Base 类中 A 的值
  7. };
  8. void D1::SetA(int a)
  9. {
  10. A = a;
  11. }
  12. int D1::GetA()
  13. {
  14. return A;
  15. }
  16. int main()
  17. {
  18. Student st;
  19. st.SetA(10); // 将 Base 类的 A 成员设置为 10
  20. }
编程要求

在右侧编辑器中的Begin-End之间补充代码,采用保护继承设计学生信息类,并实现 Set 和 PrintSID 函数,具体要求如下:

  • Student 类公有成员函数:void PrintSID(),函数输出成员变量 SID 的值,输出格式为:学号:SID

  • 普通函数:Set(int sid,string name,Student *ptr),它用前两个参数设置 ptr 对象的 SID 和 Name(继承 People 拥有的属性)属性值。

现在已有一个基类 People,它有一个公有成员变量姓名 Name,一个公有成员函数 PrintName(函数的功能是打印出 Name 的值)。

 
  1. class People
  2. {
  3. public:
  4. string Name;
  5. void PrintName();
  6. };
  7. void People::PrintName()
  8. {
  9. cout << "姓名:" << Name << endl;
  10. }
  11. #include "people.h"     // People 类定义在这里面
    #include <string>
    #include <iostream>
    using namespace std;
    
    /**********  Begin **********/
    //保护继承 People
    class Student : protected People
    {
    public:
        int SID;
        void PrintSID();
        void Setname(string name)
        {
            this->Name = name;
        }
        	//添加一个 Set 函数来设置父类的 Name 成员
        	
    };
    
    /********* End *********/
    
    void Student::PrintSID()
    {
        /********* Begin *********/
        //输出学号 SID
            cout << "学号:" << SID << endl;
        
        
        /********* End *********/
    }
    
    void Set(int sid,string name,Student *ptr)
    {
        /********* Begin *********/
        //给 ptr 对象的两个属性赋值
        ptr->Setname(name);
        ptr->SID = sid;
    
        
        
        /********* End *********/
    }

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值