選舉班幹部了!

2021-08-19 11:38:55 字數 3820 閱讀 8828

description

新學期伊始,某班要通過競爭上崗方式競選班幹部。包括班長、團支書等。現在需要你來設計2個類student和studentcadre來模擬這一過程。

1.student類是學生類,包括

(2)方法:

建構函式student(string _name, bool _***, int _grade)——初始化乙個物件。注意:其中的next初始化為null。

析構函式。

void showinfo()——輸出乙個學生的資訊。next除外。

student* getnext()——獲得next指標。

void setnext(student*)——設定next指標指向物件。

studentcadre類是student類的派生類,包括:

(1)屬性:string position——表示競聘崗位。

(2)方法:

studentcadre(string _name, bool _***, int _grade, string pos)——建構函式,初始化各種屬性。

析構函式。

void showinfo()——顯示資訊。

建構函式和析構函式都有輸出,具體見樣例。

input

輸入有多行。

第1行有4部分:姓名、性別(0或1)、年級(整數)和崗位。

第2行是乙個正整數n,表示有n個學生支援該人競聘相應崗位。之後有n行,每行有3個部分,分別是乙個學生的姓名、性別和年級。

output

見樣例。

sample input

tom 0 2015 monitor

3 jack 1 2015

mary 0 2015

sherry 1 2015

sample output

a student named by tom is created!

a student cadre with position monitor is created.

a student named by jack is created!

a student named by mary is created!

a student named by sherry is created!

name = tom, *** = 0, grade = 2015; position = monitor.

name = jack, *** = 1, grade = 2015;

name = mary, *** = 0, grade = 2015;

name = sherry, *** = 1, grade = 2015;

a student named by tom is erased.

a student named by jack is erased.

a student named by mary is erased.

a student named by sherry is erased.

hint

string類是c++提供的類,在標頭檔案string中,可以用#include來使用這個類。該類的物件可以直接利用賦值運算子(=)進行複製,也可以直接利用cout輸出,或利用cin輸入。

int main()

((studentcadre*)header) -> showinfo();

cout<

curstudent =

header;

while (curstudent -> getnext() !=

null)

curstudent =

header;

while (curstudent !=

null)

return

0;}

ac**

#include 

using

namespace

std;

class student

student* getnext()

void setnext(student*i)

};class studentcadre:public student

};int main()

((studentcadre*)header) -> showinfo();

cout

getnext() != null)

return

0;}#include

using

namespace

std;

class student

void setnext(student* i)

void showinfo()

~student()//這裡呼叫student中的showinfo時,直接用::的方式呼叫就好,不需要用cout

};int main()

((studentcadre*)header) -> showinfo();//因為前面有(studentcadre*),所以相當於是呼叫studentcadre裡面的showinfo;

//header剛開始設定的是student型別的,所以header還是基類的指標,只不過指向了派生類的物件

cout

/注意這裡有endl,所以在showinfo()裡面就不必再用endl了;

curstudent = header;//這裡又讓curstudent指向了開頭;

while (curstudent -> getnext() != null)//這裡是從開頭乙個個重新迴圈;

return

0;}

1、在這個題中,header是鍊錶的頭,curstudent是當前位置的學生,student是用來新增新的學生的。

2、curstudent是當前位置的學生,是因為剛開始指向了header,後來指向了next,可以很靈活地在不同位置之間移動,所以是當前位置。

3、header = new studentcadre(name, ***, grade,position);這裡在做煉表頭的同時也賦值,並且也輸出了;

4、設定next的位址的時候是直接把乙個位址給它;即next=i;

5、只能把派生類物件賦值給基類,而不能把基類賦值給派生類。

實際上執行的只是基類定義的賦值運算子函式,該函式只能處理基類自己的資料成員。當用派生類物件初始化基類物件時,實際上也只呼叫基類的建構函式,該函式只能初始化基類定義的成員,派生類多餘的部分是沒有用的;

(1)在非指標或者非引用的情況下把派生類賦值給基類,在完成賦值或者初始化操作後,基類物件與派生類物件就沒有關係了。

沒有關係了所以就不能呼叫派生類中沒有的成員。

(2)在指標或者引用的情況下把派生類賦值給基類,指標或者引用從來就沒有生成新物件,它們操作的是派生類物件內部的基類子物件。

只有指標或者引用的時候可以呼叫派生類中沒有的成員,但是在呼叫這些成員的時候要進行強制型別轉換。

下圖就是進行強制型別準換的例項:

因此在這個題裡面:`header還是基類的指標,只不過指向了派生類的物件,因為是指標進行的派生類向基類的賦值,因此可以強制呼叫派生類中基類沒有的成員。

選舉班幹部了

problem b 選舉班幹部了!time limit 1 sec memory limit 128 mb submit 3942 solved 2376 submit status description 新學期伊始,某班要通過競爭上崗方式競選班幹部。包括班長 團支書等。現在需要你來設計2個類st...