头歌C++面向对象实训- 类的继承与派生

时间:2024-11-24 07:05:44

C++ 面向对象 - 类的继承与派生

一、实训目的
1.了解继承的相关概念
2.掌握保护继承的使用
3.掌握私有继承的使用
4.掌握多继承的使用

二、实训内容
1.公有继承 —— 学生信息类
采用公有继承设计学生信息类。
2.保护继承 —— 学生信息类
3.研究生信息类
采用私有继承完成学生信息类和研究生信息类的设计。
4.狼人类
采用多继承设计一个狼人类

三、实训所实现系统主要功能
1.公有继承 —— 学生信息类
设计 Student 类,并实现 Set 和 PrintSID 函数
2.保护继承 —— 学生信息类**用保护继承设计学生信息类,并实现 Set 和 PrintSID 函数
3.研究生信息类
设计学生信息类( Student )和设计研究生信息类( Graduate ),Graduate 类公有继承 Student 类,而 Student 类私有继承 People 类,并实现他们的成员函数以及一个普通函数
4.狼人类
实现三个类的设计,其中成员变量和成员函数的访问性可自行设置

四、实训系统核心代码及必要说明
1.公有继承 —— 学生信息类

#include ""     // People 类定义在这里面
#include <string>
#include <iostream>

using namespace std;

/**********  Begin **********/
//公有继承 People
class Student : public People
{
    public:
        int SID;
        void PrintSID();
};
/**********  End **********/

void Student::PrintSID()
{
    /********* Begin *********/
    //输出 SID
    
    cout << "学号:" << SID << "\n";
    
    /********* End *********/
}

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

2.保护继承 —— 学生信息类

#include ""     // People 类定义在这里面
#include <string>
#include <iostream>
using namespace std;

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

/********* End *********/

void Student::PrintSID()
{
    /********* Begin *********/
    //输出学号 SID
    
    cout << "学号:" << SID << "\n";
    
    /********* End *********/
}

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

3.研究生信息类

#include "" //People类定义在这里面
#include <string>
#include <iostream>
using namespace std;

/********* Begin *********/
//私有继承 People 类
class Student : private People
{
    public:
        int SID;
        void PrintSID();
        //添加一个 Set 函数来设置父类的 Name 成员
        void setName (string name){
            this -> Name = name;
        }
};

/********* End *********/

void Student::PrintSID()
{
    /********* Begin *********/
    //输出学号 SID
    
    cout << "学号:" << SID << "\n";
        
    
    /********* End *********/
}

/********* Begin *********/
// 公有继承 Student 类
class Graduate : public Student
{
    public:
        int ResearchID;
        void PrintResearchID();
        //添加一个 Set 函数来设置父类的 SID 成员
        void setSID (int sid){
            this -> SID = sid;
        }
        //添加一个 Set 函数来调用父类的 SetName 函数
        void setNAME (string name){
            setName(name);
            
        }
};

/********* End *********/

void Graduate::PrintResearchID()
{
    /********* Begin *********/
    //输出研究方向 ResearchID
    cout << "研究方向:" << ResearchID << "\n";
    
    
    /********* End *********/
}

void Set(string name,int sid,int rid,Graduate *ptr)
{
    /********* Begin *********/
    //设置 ptr 所指对象的三个成员
    
    ptr -> setNAME(name);
    ptr -> setSID(sid);
    ptr -> ResearchID = rid;
    
    /********* End *********/
}

4.狼人类

#include <string>
#include <iostream>

using namespace std;

/********* Begin *********/
class Wolf
{
    //狼类成员的声明
    public:
        string Name;
        int Shape;
        void PrintState(){
            cout << "姓名:" << Name << ",爪子锋利度为:" << Shape << "\n";
        }
    
    
};
//狼类成员的定义



class Human
{
    //人类成员的声明
    public:
        string Name;
        int Intell;
        void PrintState(){
            cout << "姓名:" << Name << ",智力为:" << Intell << "\n";
        }
    
    
};
//人类成员的定义


// 记得在这里写上要继承的类
class Werewolf : public Wolf, public Human
{
    //狼人类成员的声明
    public:
        void SetName (string name){
            Wolf :: Name = name;
            Human :: Name = name;
        }
        void SetState (int shape, int intell){
            Wolf :: Shape = shape;
            Human :: Intell = intell;
        }
        void PrintAllState(){
            Wolf :: PrintState();
            Human :: PrintState();
        }
    
    
};
//狼人类成员的定义
/********* End *********/