国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

頭歌Educoder實(shí)驗(yàn):C++ 面向?qū)ο?- 類的繼承與派生

這篇具有很好參考價(jià)值的文章主要介紹了頭歌Educoder實(shí)驗(yàn):C++ 面向?qū)ο?- 類的繼承與派生。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

第1關(guān):公有繼承 —— 學(xué)生信息類

任務(wù)描述

本關(guān)任務(wù):采用公有繼承設(shè)計(jì)學(xué)生信息類。

相關(guān)知識

繼承

繼承是使代碼可以復(fù)用的重要手段,也是面向?qū)ο蟪绦蛟O(shè)計(jì)的核心思想之一。簡單的說,繼承是指一個(gè)對象直接使用另一對象的屬性和方法。

C++ 中的繼承關(guān)系就好比現(xiàn)實(shí)生活中的父子關(guān)系,繼承一筆財(cái)產(chǎn)比白手起家要容易得多,原始類稱為基類,繼承類稱為派生類,基類是對派生類的抽象,派生類是對基類的具體化。它們是類似于父親和兒子的關(guān)系,所以也分別叫父類和子類。而子類又可以當(dāng)成父類,被另外的類繼承。

繼承方式

不同的繼承方式?jīng)Q定了基類成員在派生類中的訪問屬性,主要體現(xiàn)在:

  1. 派生類成員對基類成員的訪問權(quán)限;

  2. 通過派生類對象對基類成員的訪問權(quán)限。

對于派生類的成員或者派生類對象訪問自己類的成員不討論,跟一般類一樣,下面只討論對基類的成員的訪問。

  • 公有繼承:基類的 public 和 protected 成員訪問屬性在派生類中保持不變;基類的 private 成員不可直接訪問。

  • 保護(hù)繼承:基類的 public 和 protected 成員都以 protected 身份出現(xiàn)在派生類中;基類的 private 成員不可直接訪問。

  • 私有繼承:基類的 public 和 protected 成員,都以 private 身份出現(xiàn)在派生類中;基類的 private 成員不可直接訪問。

可以看出無論采用何種繼承方式得到的派生類,派生類成員及其友元都不能訪問基類的私有成員。且一般情況,保護(hù)繼承與私有繼承在實(shí)際編程中極少使用,它們只在技術(shù)理論上有意義。

公有繼承

公有繼承是訪問性最高的一種繼承,在子類中能完整延續(xù)父類成員的訪問性,而且對外可見。如果要公有繼承一個(gè)類,只需繼承時(shí)在類名前面加上 public 關(guān)鍵字即可。

在公有繼承中,派生類成員可以訪問繼承的基類的 public 部分與 protected 部分,但是不能訪問 private 部分,只有基類成員以及基類的友元可以訪問 private 部分。

例如:

class Base
{
    public:
        int A;
};
class D1 : public Base     // 公有繼承 Base 類
{
    /* …… */
};
int main()
{
    D1 d;
    d.A = 10;     // 訪問 D1 的基類 Base 中的 A 成員,因?yàn)槭枪欣^承,所以沒問題
}

編程要求

在右側(cè)編輯器中的Begin-End之間補(bǔ)充代碼,設(shè)計(jì) Student 類,并實(shí)現(xiàn) Set 和 PrintSID 函數(shù),具體要求如下:

  • Student 類公有成員函數(shù):void PrintSID(),函數(shù)輸出成員變量 SID 的值,輸出格式為:學(xué)號:SID

  • 普通函數(shù):Set(int sid,string name,Student *ptr),它用前兩個(gè)參數(shù)設(shè)置 ptr 對象的 SID 和 Name(繼承 People 擁有的屬性)屬性值。

現(xiàn)在已有一個(gè)基類 People,它有一個(gè)公有成員變量姓名 Name,一個(gè)公有成員函數(shù) PrintName(函數(shù)的功能是打印出 Name 的值)。

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

測試說明

平臺(tái)會(huì)對你編寫的代碼進(jìn)行測試,比對你輸出的數(shù)值與實(shí)際正確數(shù)值,只有所有數(shù)據(jù)全部計(jì)算正確才能通過測試:

測試輸入:1 厲宏富

預(yù)期輸出:

 
  1. 學(xué)號:1
  2. 姓名:厲宏富

開始你的任務(wù)吧,祝你成功!

#include "people.h"     // 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<<"學(xué)號:"<<SID<<endl;
    
    
    /********* End *********/
}

void Set(int sid,string name,Student *ptr)
{
    /********* Begin *********/
    //給 ptr 對象的兩個(gè)屬性賦值
    ptr -> SID = sid;
    ptr -> Name = name;
    
    
    /********* End *********/
}

第2關(guān):保護(hù)繼承 —— 學(xué)生信息類

任務(wù)描述

本關(guān)任務(wù):采用保護(hù)繼承設(shè)計(jì)學(xué)生信息類。

相關(guān)知識

為了完成本關(guān)任務(wù),你需要掌握保護(hù)繼承的使用。

保護(hù)繼承

保護(hù)繼承相對于公有繼承,訪問性有所降低,父類的公有成員在子類中變成了保護(hù)成員,也就無法在外部通過一個(gè)對象訪問父類成員了,但是對于這個(gè)子類的子類仍然是可見的(因?yàn)榭梢娦灾皇墙档搅?protected )。

如果要保護(hù)繼承一個(gè)類,只需繼承時(shí)在類名前面加上 protected 關(guān)鍵字即可。

例如:

class Base
{
    public:
        int A;
};
class D1 : protected Base     // 保護(hù)繼承 Base 類
{
    /* …… */
};
int main()
{
    D1 d;
    d.A = 10;     // 嘗試訪問 D1 的基類 Base 中的 A 成員,但是由于是保護(hù)繼承,所以這樣做是錯(cuò)誤的。
}

在保護(hù)繼承中如果想通過子類訪問父類的成員,那就只能在子類中增加一些 get 、set 函數(shù)來實(shí)現(xiàn)了。

例如:

/* Base類的定義同上 */
class D1 : protected Base
{
    public:
        void SetA(int a);     // 設(shè)置 Base 類中 A 的值
        int GetA();     // 獲取 Base 類中 A 的值
};
void D1::SetA(int a)
{
    A = a;
}
int D1::GetA()
{
    return A;
}
int main()
{
    Student st;
    st.SetA(10);     // 將 Base 類的 A 成員設(shè)置為 10
}

編程要求

在右側(cè)編輯器中的Begin-End之間補(bǔ)充代碼,采用保護(hù)繼承設(shè)計(jì)學(xué)生信息類,并實(shí)現(xiàn) Set 和 PrintSID 函數(shù),具體要求如下:

  • Student 類公有成員函數(shù):void PrintSID(),函數(shù)輸出成員變量 SID 的值,輸出格式為:學(xué)號:SID。

  • 普通函數(shù):Set(int sid,string name,Student *ptr),它用前兩個(gè)參數(shù)設(shè)置 ptr 對象的 SID 和 Name(繼承 People 擁有的屬性)屬性值。

現(xiàn)在已有一個(gè)基類 People,它有一個(gè)公有成員變量姓名 Name,一個(gè)公有成員函數(shù) PrintName(函數(shù)的功能是打印出 Name 的值)。

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

測試說明

平臺(tái)會(huì)對你編寫的代碼進(jìn)行測試,比對你輸出的數(shù)值與實(shí)際正確數(shù)值,只有所有數(shù)據(jù)全部計(jì)算正確才能通過測試:

測試輸入:1 嚴(yán)宏富

預(yù)期輸出:

 
  1. 學(xué)號:1
  2. 姓名:嚴(yán)宏富

開始你的任務(wù)吧,祝你成功!

#include "people.h"     // People 類定義在這里面
#include <string>
#include <iostream>
using namespace std;

/**********  Begin **********/
//保護(hù)繼承 People
class Student:protected People
{
	public:
		int SID;
		void PrintSID();
    	//添加一個(gè) Set 函數(shù)來設(shè)置父類的 Name 成員
    	 friend void Set(int sid,string name,Student *ptr);
};

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

void Student::PrintSID()
{
    /********* Begin *********/
    //輸出學(xué)號 SID
    cout<<"學(xué)號:"<<SID<<endl;
    
    
    /********* End *********/
}

void Set(int sid,string name,Student *ptr)
{
    /********* Begin *********/
    //給 ptr 對象的兩個(gè)屬性賦值
    ptr -> SID = sid;
    ptr -> Name = name;
    
    
    /********* End *********/
}

第3關(guān):研究生信息類

任務(wù)描述

本關(guān)任務(wù):采用私有繼承完成學(xué)生信息類和研究生信息類的設(shè)計(jì)。

相關(guān)知識

為了完成本關(guān)任務(wù),你需要掌握私有繼承的使用。

私有繼承

私有繼承在保護(hù)繼承的基礎(chǔ)上更進(jìn)一步,訪問性進(jìn)一步降低,父類中的公有成員保護(hù)成員的訪問性均降到了私有 private,不僅對外不可見,對這個(gè)類的子類也不可見了。

要私有繼承一個(gè)類,只需繼承時(shí)在類名前面加上 private 關(guān)鍵字即可。

例如:

/* 繼承關(guān)系: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;     // 這里就不行了,因?yàn)?D1 類私有繼承了 Base 類,所以 Base 類的 A 成員對 D2 類就是不可見的。
}

同樣,如果想在某個(gè)類的外部或者它的子類中訪問它私有繼承的基類的成員,那也只能在這個(gè)類中增加 get、set 方法了。

例如:

/* Base類的定義同上 */
/* 繼承關(guān)系:Base->D1->D2 */
class D1 : private Base
{
    public:
        void SetA(int a);     // 設(shè)置 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);     // 調(diào)用 D1 類的 SetA 公有方法設(shè)置 Base 類 A 的值
}

編程要求

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

  1. Graduate 類

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

  1. Student 類

補(bǔ)充有成員函數(shù):void PrintSID(),函數(shù)輸出成員變量 SID 的值,輸出格式為:學(xué)號:SID。

  1. 普通函數(shù):Set(int sid,int rid,string name,Graduate *ptr)函數(shù),它用前三個(gè)參數(shù)設(shè)置 ptr 所指對象的三個(gè)成員。

People 基類,它有一個(gè)公有成員變量姓名 Name,一個(gè)公有成員函數(shù) PrintName(函數(shù)的功能是打印出 Name 的值),代碼如下:

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

測試說明

平臺(tái)會(huì)對你編寫的代碼進(jìn)行測試,比對你輸出的數(shù)值與實(shí)際正確數(shù)值,只有所有數(shù)據(jù)全部計(jì)算正確才能通過測試:

測試輸入:1 304 厲宏富

預(yù)期輸出:

 
  1. 學(xué)號:1
  2. 姓名:厲宏富
  3. 研究方向:304

開始你的任務(wù)吧,祝你成功!文章來源地址http://www.zghlxwxcb.cn/news/detail-444889.html

#include "people.h" //People類定義在這里面
#include <string>
#include <iostream>
using namespace std;

/********* Begin *********/
//私有繼承 People 類
class Student:private People
{
	public:
		int SID;
		void PrintSID();
		//添加一個(gè) Set 函數(shù)來設(shè)置父類的 Name 成員
		void Set(string name){
            Name = name;
        }
};

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

void Student::PrintSID()
{
    /********* Begin *********/
    //輸出學(xué)號 SID
    cout<<"學(xué)號:"<<SID<<endl;
    
    
    /********* End *********/
}

/********* Begin *********/
// 公有繼承 Student 類
class Graduate:public Student
{
	public:
		int ResearchID;
		void PrintResearchID();
		//添加一個(gè) Set 函數(shù)來設(shè)置父類的 SID 成員
        friend void Set(string name,int sid,int rid,Graduate *ptr);
		//添加一個(gè) Set 函數(shù)來調(diào)用父類的 SetName 函數(shù)
    	void set(string name){
            Set(name);
        }
};

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

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

void Set(string name,int sid,int rid,Graduate *ptr)
{
    /********* Begin *********/
    //設(shè)置 ptr 所指對象的三個(gè)成員
    ptr->set(name);
    ptr->SID = sid;
    ptr->ResearchID = rid;
    
    
    /********* End *********/
}

到了這里,關(guān)于頭歌Educoder實(shí)驗(yàn):C++ 面向?qū)ο?- 類的繼承與派生的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C++】面向?qū)ο缶幊蹋ǘ┟嫦驅(qū)ο蟮木幊趟季S:virtual虛擬調(diào)用、繼承、protected成員、派生類與基類

    默認(rèn)情形下,成員函數(shù)的解析都是編譯時(shí)靜態(tài)進(jìn)行。如果要讓成員函數(shù)的解析在程序運(yùn)行時(shí)動(dòng)態(tài)進(jìn)行,需要在成員函數(shù)的聲明前加上virtual: 虛函數(shù)的作用: 用基類的指針指向不同的派生類的對象時(shí),基類指針調(diào)用其虛成員函數(shù),會(huì)調(diào)用 真正指向?qū)ο蟮某蓡T函數(shù) ,而

    2024年02月07日
    瀏覽(25)
  • 實(shí)驗(yàn)三 Java類的繼承與派生

    Student IStudentDAO StudentDAOImpl MainClass

    2024年02月05日
    瀏覽(23)
  • Educoder/頭歌JAVA——JAVA面向?qū)ο螅篠tring類

    Educoder/頭歌JAVA——JAVA面向?qū)ο螅篠tring類

    String類的對象的創(chuàng)建 可以按照創(chuàng)建類的對象的一般方法來創(chuàng)建 String 類的對象: String string = new String(); 也可以直接在創(chuàng)建對象時(shí)指定字符串內(nèi)容: String string1 = \\\"Hello World\\\"; //string1字符串內(nèi)容為\\\"Hello World\\\" String string2 = \\\"\\\"; //string2字符串內(nèi)容為空 length()方法 String 類中的 length() 方

    2024年02月03日
    瀏覽(88)
  • <c++> 類的繼承 | 基類與派生類 | 構(gòu)造函數(shù)與析構(gòu)函數(shù)

    <c++> 類的繼承 | 基類與派生類 | 構(gòu)造函數(shù)與析構(gòu)函數(shù)

    ?? 個(gè)人簡介:CSDN「 博客新星 」TOP 10 , C/C++ 領(lǐng)域新星創(chuàng)作者 ?? 作 ?? 者: 錫蘭_CC ?? ?? 專 ?? 欄: 從零開始的 c++ 之旅 ?? 若有幫助,還請 關(guān)注?點(diǎn)贊?收藏 ,不行的話我再努努力?????? c++ 面向?qū)ο笕筇匦裕?封裝,繼承,多態(tài) 。通過本文我們將了解什么是類的

    2023年04月20日
    瀏覽(21)
  • Python面向?qū)ο缶幊蹋ㄒ唬╊惖幕A(chǔ),關(guān)系,繼承,封裝,多態(tài)

    Python面向?qū)ο缶幊蹋ㄒ唬╊惖幕A(chǔ),關(guān)系,繼承,封裝,多態(tài)

    類的一些理論概念及其應(yīng)用場景等基礎(chǔ)內(nèi)容此處不贅述 目錄 python中一切皆對象 類的定義及基礎(chǔ) 屬性 方法 初始化方法 ?普通方法 類之間的關(guān)系 相互調(diào)用 依賴關(guān)系 關(guān)聯(lián)關(guān)系 組合關(guān)系 三大特征----類的繼承 重寫父類方法 多繼承 混合繼承? 三大特征----封裝 三大特征----多態(tài)

    2024年02月10日
    瀏覽(29)
  • 【C++面向?qū)ο蟆?. 繼承

    【C++面向?qū)ο蟆?. 繼承

    繼承允許我們依據(jù)一個(gè)類來定義另一個(gè)類,這使得創(chuàng)建和維護(hù)一個(gè)應(yīng)用程序變得更容易。這樣做,也達(dá)到了 重用代碼功能 和 提高執(zhí)行時(shí)間 的效果。 當(dāng)創(chuàng)建一個(gè)類時(shí),我們不需要重新編寫新的數(shù)據(jù)成員和成員函數(shù),只需指定新建的類繼承了一個(gè)已有的類的成員即可。這個(gè)已

    2024年02月08日
    瀏覽(20)
  • C++ 面向?qū)ο螅?)——繼承

    C++ 面向?qū)ο螅?)——繼承

    面向?qū)ο蟪绦蛟O(shè)計(jì)中最重要的一個(gè)概念是繼承。繼承允許我們依據(jù)另一個(gè)類來定義一個(gè)類,這使得創(chuàng)建和維護(hù)一個(gè)應(yīng)用程序變得更容易。這樣做,也達(dá)到了重用代碼功能和提高執(zhí)行效率的效果。 當(dāng)創(chuàng)建一個(gè)類時(shí),您不需要重新編寫新的數(shù)據(jù)成員和成員函數(shù),只需指定新建的類

    2024年02月10日
    瀏覽(23)
  • C++ 面向?qū)ο笕筇匦浴^承

    C++ 面向?qū)ο笕筇匦浴^承

    ?1主頁:我的代碼愛吃辣 ??2知識講解:C++ 繼承 ??3開發(fā)環(huán)境:Visual Studio 2022 ??4前言:面向?qū)ο笕筇匦缘模庋b,繼承,多態(tài),今天我們研究研究 C++的繼承 。 目錄 一.繼承的概念及定義 1.繼承的概念 ?2.繼承的定義 二. 繼承關(guān)系和訪問限定符 ?三.基類和派生類對象賦

    2024年02月12日
    瀏覽(23)
  • C++:面向?qū)ο蟠罂樱毫庑卫^承

    C++:面向?qū)ο蟠罂樱毫庑卫^承

    單繼承:一個(gè)子類只有 一個(gè)直接父類 時(shí)稱這個(gè)繼承關(guān)系為單繼承。 圖示: 多繼承:一個(gè)子類有 兩個(gè)或以上直接父類 時(shí)稱這個(gè)繼承關(guān)系為多繼承。 圖示: 1.概念 菱形繼承:菱形繼承是多繼承的一種特殊情況。即:一個(gè)類是另外幾個(gè)類的子類,而這幾個(gè)子類又是另外一個(gè)類

    2024年04月27日
    瀏覽(21)
  • 【期末不掛科-C++考前速過系列P4】大二C++實(shí)驗(yàn)作業(yè)-繼承和派生(3道代碼題)【解析,注釋】

    【期末不掛科-C++考前速過系列P4】大二C++實(shí)驗(yàn)作業(yè)-繼承和派生(3道代碼題)【解析,注釋】

    前言 大家好吖,歡迎來到 YY 滴C++考前速過系列 ,熱烈歡迎! 本章主要內(nèi)容面向接觸過C++的老鐵 主要內(nèi)容含: 歡迎訂閱 YY 滴C++專欄!更多干貨持續(xù)更新!以下是傳送門! YY的《C++》專欄 YY的《C++11》專欄 YY的《Linux》專欄 YY的《數(shù)據(jù)結(jié)構(gòu)》專欄 YY的《C語言基礎(chǔ)》專欄 YY的《

    2024年01月17日
    瀏覽(88)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包