日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不是很难的研究生信息类

發布時間:2024/1/18 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不是很难的研究生信息类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

任務描述

本關任務:采用私有繼承完成學生信息類和研究生信息類的設計。

相關知識

為了完成本關任務,你需要掌握私有繼承的使用。

私有繼承
私有繼承在保護繼承的基礎上更進一步,訪問性進一步降低,父類中的公有成員和保護成員的訪問性均降到了私有 private,不僅對外不可見,對這個類的子類也不可見了。

要私有繼承一個類,只需繼承時在類名前面加上 private 關鍵字即可。

例如:

/* 繼承關系:Base->D1->D2 */
class Base
{
public:
int A;
};
class D1 : private Base // 私有繼承 Base 類
{
public:
F1();
};
void D1::F1()
{
A = 10; // 父類的成員 A 可以看做 D1 類的私有成員,在 D1 類中訪問 A 是可行的
}
class D2 : public D1 // 公有繼承 D1
{
public:
F2();
};
void D2::F2()
{
A = 10; // 這里就不行了,因為 D1 類私有繼承了 Base 類,所以 Base 類的 A 成員對 D2 類就是不可見的。
}
同樣,如果想在某個類的外部或者它的子類中訪問它私有繼承的基類的成員,那也只能在這個類中增加 get、set 方法了。

例如:

/* Base類的定義同上 /
/ 繼承關系:Base->D1->D2 */
class D1 : private Base
{
public:
void SetA(int a); // 設置 Base 類中 A 的值
int GetA(); // 獲取 Base 類中 A 的值
};
void D1::SetA(int a)
{
A = a;
}
int D1::GetA()
{
return A;
}
class D2 : public D1 // 公有繼承 D1 類
{
public:
void F2();
}
void D2::F2()
{
SetA(10); // 調用 D1 類的 SetA 公有方法設置 Base 類 A 的值
}

編程要求

在右側編輯器中的Begin-End之間補充代碼,設計學生信息類( Student )和設計研究生信息類( Graduate ),Graduate 類公有繼承 Student 類,而 Student 類私有繼承 People 類,并實現他們的成員函數以及一個普通函數,具體要求如下:

Graduate 類
增加一個成員變量研究方向:int ResearchID,以及一個成員函數:void PrintResearchID(),函數用來輸出 ResearchID 的值,輸出格式為:研究方向:ResearchID。

Student 類
補充有成員函數:void PrintSID(),函數輸出成員變量 SID 的值,輸出格式為:學號:SID。

普通函數:Set(int sid,int rid,string name,Graduate *ptr)函數,它用前三個參數設置 ptr 所指對象的三個成員。
People 基類,它有一個公有成員變量姓名 Name,一個公有成員函數 PrintName(函數的功能是打印出 Name 的值),代碼如下:

/* 繼承關系:People->Student->Graduate */
class People
{
public:
string Name;
void PrintName();
};
void People::PrintName()
{
cout << Name << endl;
}

測試說明

平臺會對你編寫的代碼進行測試,比對你輸出的數值與實際正確數值,只有所有數據全部計算正確才能通過測試:

測試輸入:1 304 厲宏富

預期輸出:

學號:1
姓名:厲宏富
研究方向:304
下面展示一些 內聯代碼片。

#include "people.h" //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){Name=name;}; }; /********* End *********/ void Student::PrintSID() {/********* Begin *********///輸出學號 SIDcout << "學號:" << SID << endl;/********* End *********/ } /********* Begin *********/ // 公有繼承 Student 類 class Graduate :public Student {public:int ResearchID;void PrintResearchID();//添加一個 Set 函數來設置父類的 SID 成員friend void Set(string name,int sid,int rid,Graduate *ptr); //添加一個 Set 函數來調用父類的 SetName 函數void set(string name){SetName(name);}; }; /********* End *********/ void Graduate::PrintResearchID() {/********* Begin *********///輸出研究方向 ResearchIDcout<<"研究方向:"<<ResearchID<<endl;/********* End *********/ } void Set(string name,int sid,int rid,Graduate *ptr) {/********* Begin *********///設置 ptr 所指對象的三個成員ptr->set(name);ptr->SID=sid;ptr->ResearchID=rid;/********* End *********/ }#ifndef PEO_H_ #define PEO_H_ #include<string> #include<iostream> using namespace std;class People {public:string Name;void PrintName(); };void People::PrintName() {cout << "姓名:" << Name << endl; } #endif#include "usr.h"int main() {int i,j;string name;cin >> i >> j >> name;Graduate st;Set(name,i,j,&st);((Student*)&st)->PrintSID();((People*)&st)->PrintName();st.PrintResearchID(); }

總結

以上是生活随笔為你收集整理的不是很难的研究生信息类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。