头歌实训项目【保护继承——学生信息类】

本文展示了一个C++程序,定义了一个`People`类和一个`Student`类,`Student`类从`People`类保护继承。程序中包含设置和获取姓名的方法,以及设置和打印学号的功能。在`main`函数中,创建了一个`Student`对象并展示了如何使用这些方法。
摘要由CSDN通过智能技术生成
#include <string>
#include <iostream>
using namespace std;

class People
{
public:
    string Name;
    void PrintName();
};

void People::PrintName()
{
    cout << "姓名:" << Name << endl;
}

//保护继承 People
class Student :protected People
{
public:
    int SID;
    void PrintSID();
    //添加一个 Set 函数来设置父类的 Name 成员
    void Set(string name);
    string Get();

};
void Student::Set(string name)
{
    Name = name;
}
string Student::Get()
{
    return Name;
}

void Student::PrintSID()
{
    //输出学号 SID
    cout << "学号:" << SID << endl;
}

void Set(int sid, string name, Student* ptr)
{
    //给 ptr 对象的两个属性赋值
    ptr->SID = sid;
    ptr->Set(name);

}

int main()
{
    int id;
    string name;
    cin >> id >> name;
    Student st;
    Set(id, name, &st);
    st.PrintSID();
    ((People*)&st)->PrintName();
}

保护继承是指子继承的成员,但是只有内和友元可以访问这些成员,对于外部的其他代码是不可见的。这样可以保护的实现细节,同时也可以在子中使用这些成员。 下面以学生信息为例,演示如何使用保护继承。 ```c++ #include <iostream> #include <string> using namespace std; // 父:人 class Person { public: Person(string name, int age) : m_name(name), m_age(age) {} void showInfo() { cout << "姓名:" << m_name << endl; cout << "年龄:" << m_age << endl; } protected: // 保护成员 string m_name; // 姓名 int m_age; // 年龄 }; // 子:学生 class Student : protected Person { public: Student(string name, int age, int score) : Person(name, age), m_score(score) {} void showInfo() { Person::showInfo(); // 调用父的 showInfo 函数 cout << "成绩:" << m_score << endl; } private: int m_score; // 成绩 }; int main() { Student s("小明", 18, 90); s.showInfo(); // 调用子的 showInfo 函数 return 0; } ``` 在上面的例子中,父 `Person` 中的成员 `m_name` 和 `m_age` 被声明为保护成员,子 `Student` 继承了这两个成员。在子中,我们使用 `protected` 访问修饰符将父的成员变量和成员函数设置为保护成员,这样子就可以访问这些成员了。 在子中,我们重写了 `showInfo` 函数,并在其中调用了父的 `showInfo` 函数,然后输出了子新增的成员 `m_score`。最后在 `main` 函数中,我们创建了一个 `Student` 对象,并调用了 `showInfo` 函数,输出了学生的信息。 在这个例子中,我们使用保护继承来访问父的成员,这样可以保护的实现细节,同时也可以在子中使用这些成员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值