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

西安石油大學(xué)期末考試C++真題解析

這篇具有很好參考價(jià)值的文章主要介紹了西安石油大學(xué)期末考試C++真題解析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

西安石油大學(xué)期末考試C++真題解析
1、一、類(lèi)型、返回值類(lèi)型 二、參數(shù)表、函數(shù)重載

2、一、實(shí)例化 二、實(shí)例化的類(lèi)型或類(lèi)類(lèi)是對(duì)象的藍(lán)圖,對(duì)象是類(lèi)的實(shí)例化

3、const

4、一個(gè) 兩個(gè)

5、一、公有繼承 二、私有繼承、保護(hù)繼承

6、抽象類(lèi)、實(shí)例化對(duì)象

7、函數(shù)模板、類(lèi)模板

8、try、catch、throw

9、流插入運(yùn)算符、流提取運(yùn)算符

10、可以、可以

11、析構(gòu)函數(shù)

程序閱讀題:

#include <iostream>
int m = 10;
void a(int n) {
n = 15 / n;
m = m / 2;
}
int main() {
int n = 3;
a(n);
std::cout << "m=" << m << std::endl;
std::cout << "n=" << n << std::endl;
return 0;
}

這段代碼的功能如下:

  1. 包含了iostream頭文件以使用輸入輸出流。
  2. 定義了一個(gè)整型變量m并初始化為10。
  3. 聲明了一個(gè)函數(shù)a,接受一個(gè)整型參數(shù)n。
  4. 在函數(shù)a中,將15除以參數(shù)n的值賦給n,然后m除以2的結(jié)果賦給m。
  5. 在主函數(shù)main中,定義了一個(gè)整型變量n并初始化為3。
  6. 調(diào)用函數(shù)a,并傳入?yún)?shù)n。
  7. 使用cout輸出m的值,并換行。
  8. 使用cout輸出n的值,并換行。
  9. 返回0,表示程序正常結(jié)束。
    代碼的執(zhí)行流程如下:
  10. 聲明一個(gè)整型變量m并初始化為10。
  11. 定義函數(shù)a,接受一個(gè)整型參數(shù)n。
  12. 在函數(shù)a中,將15除以參數(shù)n的值賦給n,然后將m除以2的結(jié)果賦給m。
  13. 在主函數(shù)main中,定義一個(gè)整型變量n并初始化為3。
  14. 調(diào)用函數(shù)a,并將參數(shù)n的值傳入。
  15. 使用cout輸出m的值為5,并換行。
  16. 使用cout輸出n的值為3,并換行。
  17. 返回0,表示程序正常結(jié)束。
    最終輸出結(jié)果為:
m=5
n=3

這段代碼的功能是對(duì)變量m和n進(jìn)行一些計(jì)算操作,并輸出結(jié)果。

答案:m = 5,n = 3; 過(guò)程:a(3); ----> { n = 15/3; m = 10/2; } n是在main()函數(shù)中聲明的,n = 3,所以n = 15/3 = 5,只在函數(shù)a()的作用域中n = 5,但是a()是 void 類(lèi)型,沒(méi)有返回值,因此,回到main()函數(shù)中后,n仍然等于3。而m是全局變量,在整個(gè)程序的任何一個(gè)地方更改m的值,m的值都將改變,因此a()函數(shù)改變m的值后,main()函數(shù)中的m的值也發(fā)生了相應(yīng)的改變。所以 ,調(diào)用a(3)后,在main()函數(shù)中輸出cout<<m<<" "<<n<<endl; 結(jié)果為: 5 3


#include <iostream>
using namespace std;

class PP {
    int x, y;
public:
    PP() {
        x = 3;
        y = 5;
    }
    PP(int i, int j) {
        x = i - y - j;
    }
    void Messages() {
        cout << "x=" << x << " y=" << y << endl;
    }
};

int main() {
    PP* p1 = new PP();
    PP p2(3, 4);
    p2.Messages();
    p1->Messages();
    
    delete p1; // 釋放動(dòng)態(tài)分配的內(nèi)存

    return 0;
}

這段代碼的分析過(guò)程如下:

  1. 包含了iostream頭文件以使用輸入輸出流。
  2. 使用了using namespace std來(lái)避免每次都需要寫(xiě)std::前綴。
  3. 聲明了一個(gè)名為PP的類(lèi)。
  4. 在PP類(lèi)中,定義了私有成員變量x和y。
  5. 提供了兩個(gè)構(gòu)造函數(shù):一個(gè)無(wú)參構(gòu)造函數(shù),用于初始化x和y的值為3和5;一個(gè)有參構(gòu)造函數(shù),用于將傳入的參數(shù)分別賦值給x和y。
  6. 定義了一個(gè)名為Messages的成員函數(shù),用來(lái)輸出x和y的值。
  7. 定義了主函數(shù)main。
  8. 在主函數(shù)中,通過(guò)使用new關(guān)鍵字動(dòng)態(tài)地創(chuàng)建了一個(gè)PP類(lèi)的對(duì)象p1,并調(diào)用了其無(wú)參構(gòu)造函數(shù)。這里使用了指針p1來(lái)存儲(chǔ)對(duì)象的地址。
  9. 創(chuàng)建了一個(gè)PP類(lèi)的對(duì)象p2,并調(diào)用了其有參構(gòu)造函數(shù),傳入?yún)?shù)3和4。對(duì)象p2會(huì)在棧上分配內(nèi)存。
  10. 調(diào)用p2的Messages函數(shù),輸出x和y的值,即輸出"x=3 y=4"。
  11. 通過(guò)指針p1調(diào)用Messages函數(shù),輸出x和y的值,即輸出"x=3 y=5"。
  12. 使用delete關(guān)鍵字釋放動(dòng)態(tài)分配的內(nèi)存,即釋放p1指向的對(duì)象的內(nèi)存。
  13. 返回0,表示程序正常結(jié)束。
    最終輸出結(jié)果為:
x=3 y=4
x=3 y=5

該代碼主要展示了類(lèi)的定義與使用。其中,類(lèi)PP包含了兩個(gè)構(gòu)造函數(shù)、兩個(gè)私有成員變量和一個(gè)成員函數(shù)。在主函數(shù)中,通過(guò)對(duì)象和指針?lè)謩e創(chuàng)建并使用了PP類(lèi)的實(shí)例。通過(guò)調(diào)用成員函數(shù)Messages,可以輸出對(duì)象的成員變量x和y的值。最后,通過(guò)delete關(guān)鍵字釋放了通過(guò)new關(guān)鍵字動(dòng)態(tài)分配的內(nèi)存,以避免內(nèi)存泄漏。


分析一下過(guò)程#include <iostream>
using namespace std;
class A {
int a;
public:
A(int aa = 0) : a(aa) {
cout << a << "    ";
}
~A() {
cout << "析構(gòu)";
}
};
int main() {
A x[2] = {2};
cout << endl;
return 0;
}

這段代碼的分析過(guò)程如下:

  1. 包含了iostream頭文件以使用輸入輸出流。
  2. 使用了using namespace std來(lái)避免每次都需要寫(xiě)std::前綴。
  3. 聲明了一個(gè)名為A的類(lèi)。
  4. 在A類(lèi)中,定義了一個(gè)私有成員變量a。
  5. 提供了一個(gè)構(gòu)造函數(shù)A,其中使用了參數(shù)的默認(rèn)值0,用于初始化a的值。構(gòu)造函數(shù)會(huì)輸出a的值。
  6. 定義了一個(gè)析構(gòu)函數(shù)~A,用于在對(duì)象被銷(xiāo)毀時(shí)輸出一條提示信息。
  7. 定義了主函數(shù)main。
  8. 在主函數(shù)中,創(chuàng)建了一個(gè)名為x的A類(lèi)對(duì)象數(shù)組,數(shù)組大小為2。數(shù)組中的第一個(gè)對(duì)象會(huì)調(diào)用構(gòu)造函數(shù),并將參數(shù)2傳入進(jìn)行初始化。構(gòu)造函數(shù)會(huì)輸出2。數(shù)組中的第二個(gè)對(duì)象會(huì)使用參數(shù)的默認(rèn)值0進(jìn)行初始化。構(gòu)造函數(shù)會(huì)輸出0。
  9. 在主函數(shù)中,輸出一個(gè)空行。
  10. 返回0,表示程序正常結(jié)束。
    最終輸出結(jié)果為:
2    0    析構(gòu)析構(gòu)

代碼的執(zhí)行過(guò)程如下:

  1. 主函數(shù)開(kāi)始執(zhí)行。
  2. 創(chuàng)建一個(gè)名為x的A類(lèi)對(duì)象數(shù)組,數(shù)組大小為2。
  3. 數(shù)組中的第一個(gè)對(duì)象會(huì)調(diào)用構(gòu)造函數(shù)A(2),因此構(gòu)造函數(shù)會(huì)輸出2。
  4. 數(shù)組中的第二個(gè)對(duì)象會(huì)使用參數(shù)的默認(rèn)值0進(jìn)行初始化,因此構(gòu)造函數(shù)會(huì)輸出0。
  5. 在主函數(shù)中,輸出一個(gè)空行。
  6. 主函數(shù)執(zhí)行完畢,對(duì)象數(shù)組x會(huì)被銷(xiāo)毀,先銷(xiāo)毀第二個(gè)對(duì)象(析構(gòu)函數(shù)輸出"析構(gòu)"),再銷(xiāo)毀第一個(gè)對(duì)象(析構(gòu)函數(shù)輸出"析構(gòu)")。
    因此,最終的輸出結(jié)果是"2 0 析構(gòu)析構(gòu)"。(** 析構(gòu)析構(gòu)中間沒(méi)有空?。?!**)

#include <iostream>
using namespace std;

class A {
    int a, b;

public:
    A() {
        a = 0;
        b = 0;
    }
    A(int m) {
        a = m;
        b = 0;
    }
    A(int m, int n) {
        a = m;
        b = n;
    }

    void print() {
        cout << "a=" << a << " b=" << b << endl;
    }
};

int main() {
    A a, a2(5), a3(5, 15);

    a.print();
    a2.print();
    a3.print();

    return 0;
}

修正后的代碼的運(yùn)行結(jié)果為:

a=0 b=0
a=5 b=0
a=5 b=15

代碼的執(zhí)行過(guò)程如下:

  1. 包含了iostream頭文件以使用輸入輸出流。
  2. 使用了using namespace std來(lái)避免每次都需要寫(xiě)std::前綴。
  3. 聲明了一個(gè)名為A的類(lèi)。
  4. 在A類(lèi)中,定義了兩個(gè)私有成員變量a和b。
  5. 提供了三個(gè)構(gòu)造函數(shù):
    • 默認(rèn)構(gòu)造函數(shù)A(),將a和b都初始化為0。
    • 構(gòu)造函數(shù)A(int m),將a初始化為m,b初始化為0。
    • 構(gòu)造函數(shù)A(int m, int n),將a初始化為m,b初始化為n。
  6. 定義了一個(gè)成員函數(shù)print(),用于輸出a和b的值。
  7. 定義了主函數(shù)main。
  8. 在主函數(shù)中,分別創(chuàng)建了三個(gè)A類(lèi)對(duì)象a、a2和a3,分別使用了不同的構(gòu)造函數(shù)進(jìn)行初始化。
  9. 依次調(diào)用a、a2和a3的print()函數(shù),分別輸出a和b的值。
  10. 返回0,表示程序正常結(jié)束。
    因此,最終的運(yùn)行結(jié)果為:
a=0 b=0
a=5 b=0
a=5 b=15

#include <iostream>
using namespace std;

class A {
public:
    A() {
        cout << "generate class A" << endl;
    }
    ~A() {
        cout << "destroy class A" << endl;
    }
};

class B : public A {
public:
    B() {
        cout << "generate class B" << endl;
    }
    ~B() {
        cout << "destroy class B" << endl;
    }
};

int main() {
    B b;

    return 0;
}

這段代碼定義了兩個(gè)類(lèi)A和B,并在主函數(shù)中創(chuàng)建了一個(gè)B類(lèi)對(duì)象b。類(lèi)A和類(lèi)B都定義了構(gòu)造函數(shù)和析構(gòu)函數(shù),并且類(lèi)B繼承自類(lèi)A。
在程序執(zhí)行過(guò)程中,首先創(chuàng)建了一個(gè)B類(lèi)對(duì)象b。由于B類(lèi)是A類(lèi)的子類(lèi),因此在創(chuàng)建B類(lèi)對(duì)象時(shí),會(huì)先調(diào)用A類(lèi)的構(gòu)造函數(shù),然后再調(diào)用B類(lèi)的構(gòu)造函數(shù)。因此,首先輸出"generate class A",然后輸出"generate class B"。
當(dāng)程序執(zhí)行完畢時(shí),會(huì)先銷(xiāo)毀B類(lèi)對(duì)象b,調(diào)用B類(lèi)的析構(gòu)函數(shù),輸出"destroy class B",然后調(diào)用A類(lèi)的析構(gòu)函數(shù),輸出"destroy class A"。
因此,最終的運(yùn)行結(jié)果為:

generate class A
generate class B
destroy class B
destroy class A

#include <iostream>
using namespace std;
class Base {
int x;
public:
virtual void Set(int b) {
x = b;
cout << "x=" << x << endl;
}
};
class Derived : public Base {
protected:
int y;
public:
void Set(int d) {
y = d;
cout << "y=" << y << endl;
}
};
int main() {
Base Bobj;
Derived Dobj;
Base* p;
p = &Bobj;
p->Set(100);
p = &Dobj;
p->Set(200);
return 0;
}

這段代碼定義了兩個(gè)類(lèi)Base和Derived,并在主函數(shù)中創(chuàng)建了一個(gè)Base類(lèi)對(duì)象Bobj和一個(gè)Derived類(lèi)對(duì)象Dobj。類(lèi)Base和類(lèi)Derived都定義了函數(shù)Set,并且類(lèi)Derived繼承自類(lèi)Base。
在程序執(zhí)行過(guò)程中,首先創(chuàng)建了一個(gè)Base類(lèi)對(duì)象Bobj和一個(gè)Derived類(lèi)對(duì)象Dobj。
接下來(lái),聲明了一個(gè)Base指針變量p,并將p指向Bobj。然后通過(guò)p調(diào)用Set(100)函數(shù),由于Set函數(shù)是虛函數(shù),所以會(huì)根據(jù)指針指向的對(duì)象類(lèi)型調(diào)用相應(yīng)的函數(shù)。這里p指向的是Base類(lèi)對(duì)象Bobj,所以調(diào)用了Base類(lèi)的Set函數(shù),輸出"x=100"。
然后,將p指向Dobj。再次通過(guò)p調(diào)用Set(200)函數(shù),同樣根據(jù)指針指向的對(duì)象類(lèi)型調(diào)用相應(yīng)的函數(shù)。這里p指向的是Derived類(lèi)對(duì)象Dobj,所以調(diào)用了Derived類(lèi)的Set函數(shù),輸出"y=200"。
因此,最終的運(yùn)行結(jié)果為:

x=100
y=200

#include <iostream>
using namespace std;

template <class T>
T min(T x, T y) {
    cout << "function1: ";
    return (x <= y) ? x : y;
}

int min(int x, int y) {
    cout << "function2: ";
    return (x < y) ? x : y;
}

int main() {
    int i = 5, j = 6;
    double d = 1.22, f = 13.21;

    cout << min(i, j) << endl;
    cout << min(d, f) << endl;
    cout << min(d, i) << endl;

    return 0;
}

這段代碼定義了一個(gè)函數(shù)模板min和一個(gè)重載的min函數(shù)。函數(shù)模板min可以接受任意類(lèi)型的參數(shù),而重載的min函數(shù)只接受兩個(gè)int類(lèi)型的參數(shù)。
在主函數(shù)中,創(chuàng)建了兩個(gè)int類(lèi)型的變量i和j,并分別初始化為5和6。還創(chuàng)建了兩個(gè)double類(lèi)型的變量d和f,并分別初始化為1.22和13.21。
接下來(lái),使用cout輸出調(diào)用min(i, j)的結(jié)果,由于傳入的是兩個(gè)int類(lèi)型的參數(shù),因此調(diào)用的是重載的min函數(shù),輸出"function2: 5"。
然后,使用cout輸出調(diào)用min(d, f)的結(jié)果,由于傳入的是兩個(gè)double類(lèi)型的參數(shù),因此調(diào)用的是函數(shù)模板min,輸出"function1: 1.22"。
最后,使用cout輸出調(diào)用min(d, i)的結(jié)果,由于傳入的是一個(gè)double類(lèi)型和一個(gè)int類(lèi)型的參數(shù),因此調(diào)用的是函數(shù)模板min,輸出"function1: 1.22"。
因此,最終的運(yùn)行結(jié)果為:

function2: 5
function1: 1.22
function1: 1.22

#include <iostream>
#include <iomanip>

using namespace std;

int main() {
    int k = 11;
    cout << "k=" << hex << k << endl;
    float d = 12.34144;
    cout << "d=" << setw(10) << setprecision(5) << setfill('*') << dec<< d << endl;
    
    return 0;
}

給出的代碼是正確的。以下是代碼的執(zhí)行過(guò)程和運(yùn)行結(jié)果:

  1. 包含了iostream和iomanip頭文件以使用輸入輸出流和格式化輸出的函數(shù)。
  2. 使用了using namespace std來(lái)避免每次都需要寫(xiě)std::前綴。
  3. 定義了主函數(shù)main。
  4. 聲明了一個(gè)int類(lèi)型的變量k,并初始化為11。
  5. 使用cout輸出"k=",然后使用hex表示輸出k的十六進(jìn)制形式,輸出結(jié)果為b。
  6. 聲明了一個(gè)float類(lèi)型的變量d,并初始化為12.34144。
  7. 使用cout輸出"d=",然后使用setw(10)表示輸出寬度為10個(gè)字符,使用setprecision(5)表示保留小數(shù)點(diǎn)后5位,使用setfill(‘‘)表示填充字符為’’。
  8. 使用dec表示以十進(jìn)制格式輸出。
  9. 最后使用cout輸出d的值,輸出結(jié)果為"*****12.34144"。
    因此,最終的運(yùn)行結(jié)果為:
k=b
d=*****12.34144

#include <iostream>

class A {
    int x;

public:
    A() {
        x = 2;
    }

    void print() {
        std::cout << "x = " << x << std::endl;
    }

    void operator++() {
        x += 5;
    }

    void operator--() {
        x -= 2;
    }
};

int main() {
    A a;
    ++a;
    a.print();
    --a;
    a.print();

    return 0;
}

這段代碼定義了一個(gè)類(lèi) A,并在 main() 函數(shù)中使用該類(lèi)。

類(lèi) A 包含一個(gè)私有成員變量 x,默認(rèn)初始化為 2。類(lèi) A 還定義了以下成員函數(shù):

  • print() 函數(shù)用于輸出變量 x 的值。
  • operator++() 重載了前置遞增運(yùn)算符,將變量 x 的值增加 5。
  • operator--() 重載了前置遞減運(yùn)算符,將變量 x 的值減少 2。

main() 函數(shù)中,首先創(chuàng)建了一個(gè)類(lèi) A 的對(duì)象 a,調(diào)用構(gòu)造函數(shù)初始化 x 的值為 2。接著,通過(guò) ++ax 的值增加 5,并調(diào)用 a.print() 輸出結(jié)果。然后,通過(guò) --ax 的值減少 2,并再次調(diào)用 a.print() 輸出結(jié)果。

所以,程序的輸出結(jié)果應(yīng)為:

x = 7
x = 5

代碼邏輯比較簡(jiǎn)單,它主要演示了對(duì)類(lèi) A 進(jìn)行成員函數(shù)重載和對(duì)對(duì)象進(jìn)行遞增和遞減操作的功能。


#include <iostream>

class Base {
    int x, y;

public:
    Base(int x, int y) : x(x), y(y) {}

    void Move(int m, int n) {
        x += m;
        y += n;
    }

    void Show() {
        std::cout << "Base(" << x << "," << y << ")" << std::endl;
    }
};

class Derived : private Base {
    int x1, yl;

public:
    Derived(int i, int j, int m, int n) : Base(i, j), {x1=m, yl=n;}

    void Show() {
        std::cout << "Next(" << x1 << "," << yl << ")" << std::endl;
    }

    void Move{Move(2,3);}
     

    void Show1() {
        Base::Show();
        Show();
    }
};

int main() {
    Base b(1, 2);
    b.Show();

    Derived d(3, 4, 10, 15);
    d.Move1();
    d.Show();
    d.Show1();
    return 0;
}

這段代碼定義了兩個(gè)類(lèi) BaseDerived,并在 main 函數(shù)中創(chuàng)建了對(duì)象進(jìn)行測(cè)試。

首先,讓我們逐行分析代碼:

#include <iostream>

這一行代碼包含了標(biāo)準(zhǔn)輸入輸出流庫(kù),使得我們可以使用 std::cout 來(lái)輸出信息。

接下來(lái)是類(lèi) Base 的定義:

class Base {
    int x, y;

public:
    Base(int x, int y) : x(x), y(y) {}

    void Move(int m, int n) {
        x += m;
        y += n;
    }

    void Show() {
        std::cout << "Base(" << x << "," << y << ")" << std::endl;
    }
};

類(lèi) Base 有兩個(gè)私有成員變量 xy,表示整數(shù)坐標(biāo)。構(gòu)造函數(shù) Base(int x, int y) 用于初始化這兩個(gè)成員變量。成員函數(shù) Move(int m, int n)xy 分別增加 mn。成員函數(shù) Show() 輸出 xy 的值。

接下來(lái)是類(lèi) Derived 的定義:

class Derived : private Base {
    int x1, y1;

public:
    Derived(int i, int j, int m, int n) : Base(i, j), x1(m), y1(n) {}

    void Show() {
        std::cout << "Next(" << x1 << "," << y1 << ")" << std::endl;
    }

    void Move() {
        Base::Move(2, 3);
    }

    void ShowAll() {
        Base::Show();
        Show();
    }
};

類(lèi) Derived 私有繼承自 Base,意味著 Derived 類(lèi)中的成員函數(shù)可以訪問(wèn) Base 類(lèi)的公有成員函數(shù)。類(lèi) Derived 有兩個(gè)私有成員變量 x1y1,表示另外一組整數(shù)坐標(biāo)。構(gòu)造函數(shù) Derived(int i, int j, int m, int n) 初始化基類(lèi) Base 的成員變量,以及派生類(lèi) Derived 自己的成員變量。成員函數(shù) Show() 輸出派生類(lèi)的坐標(biāo)。成員函數(shù) Move() 調(diào)用基類(lèi) BaseMove() 函數(shù),并傳遞參數(shù) (2, 3) 來(lái)增加 Base 對(duì)象的坐標(biāo)。成員函數(shù) ShowAll() 先調(diào)用基類(lèi) BaseShow() 函數(shù),然后再調(diào)用派生類(lèi) DerivedShow() 函數(shù)。

最后是 main 函數(shù):

int main() {
    Base b(1, 2);
    b.Show();

    Derived d(3, 4, 10, 15);
    d.Move();
    d.Show();
    d.ShowAll();

    return 0;
}

main 函數(shù)中,首先創(chuàng)建了一個(gè) Base 對(duì)象 b,并調(diào)用其成員函數(shù) Show() 輸出 (1, 2)。接下來(lái),創(chuàng)建了一個(gè) Derived 對(duì)象 d,并通過(guò)構(gòu)造函數(shù)進(jìn)行初始化。然后,調(diào)用 d.Move() 函數(shù),使得基類(lèi) Base 的坐標(biāo)增加 (2, 3)。接著,調(diào)用 d.Show() 輸出派生類(lèi) Derived 的坐標(biāo) (10, 15)。最后,調(diào)用 d.ShowAll() 函數(shù),先輸出基類(lèi) Base 的坐標(biāo) (1, 2),然后輸出派生類(lèi) Derived 的坐標(biāo) (10, 15)。

根據(jù)代碼的邏輯,以下是程序運(yùn)行后的輸出結(jié)果:

Base(1, 2)
Next(10, 15)
Base(3, 4)
Next(10, 15)

首先,使用 Base 類(lèi)創(chuàng)建對(duì)象 b,然后調(diào)用 b.Show() 輸出 (1, 2)。

接著,使用 Derived 類(lèi)創(chuàng)建對(duì)象 d,并傳入?yún)?shù) (3, 4, 10, 15) 進(jìn)行初始化。然后,調(diào)用 d.Move() 函數(shù),將基類(lèi) Base 的坐標(biāo)增加 (2, 3)。

接下來(lái),調(diào)用 d.Show() 輸出派生類(lèi) Derived 的坐標(biāo) (10, 15)

最后,調(diào)用 d.ShowAll() 函數(shù),先輸出基類(lèi) Base 的坐標(biāo) (3, 4),然后輸出派生類(lèi) Derived 的坐標(biāo) (10, 15)。

請(qǐng)注意,由于類(lèi) Base 的成員函數(shù) Move()Show() 都沒(méi)有聲明為虛函數(shù),因此在通過(guò)基類(lèi)指針或引用調(diào)用這些函數(shù)時(shí)將無(wú)法實(shí)現(xiàn)多態(tài)性。在這個(gè)例子中,直接通過(guò)對(duì)象調(diào)用了相應(yīng)的函數(shù),而不是通過(guò)指針或引用。

程序填空

#include <iostream>

class A {
public:
——————————————————
    int x, y;

public:
    A(int i, int j) : x(i), y(j) {}
    
    void Show() {
        std::cout << "x: " << x << ", y: " << y << std::endl;
    }
};

int main() {
    A a(1, 2);
    a.Show(); // 調(diào)用 Show() 成員函數(shù)輸出對(duì)象的坐標(biāo)信息
    return 0;
}

程序設(shè)計(jì)題(共20分)

編寫(xiě)一個(gè)輸出學(xué)校教師和后勒職員信息的程序。設(shè)計(jì)基類(lèi)People,屬性包括“工號(hào)”和“姓名”:派生類(lèi)教師類(lèi)Teacher和后勒職員類(lèi)worker中分別新增屬稚“職稱(chēng)”和“工齡”,并設(shè)計(jì)主函數(shù)進(jìn)行測(cè)試。要求:
1,定義構(gòu)造函數(shù)和輸出成員函數(shù):
2.使用擴(kuò)充繼承實(shí)現(xiàn)派生類(lèi)人員信息的輸出。
根據(jù)你的需求,我為你提供了一個(gè)滿(mǎn)足要求的 C++ 程序示例:

#include <iostream>
#include <string>

// 基類(lèi) People
class People {
protected:
    int id;         // 工號(hào)
    std::string name;   // 姓名

public:
    People(int id, const std::string& name)
        : id(id), name(name) {}

    // 輸出成員函數(shù)
    void display() const {
        std::cout << "工號(hào): " << id << std::endl;
        std::cout << "姓名: " << name << std::endl;
    }
};

// 派生類(lèi) Teacher
class Teacher : public People {
private:
    std::string title;  // 職稱(chēng)

public:
    Teacher(int id, const std::string& name, const std::string& title)
        : People(id, name), title(title) {}

    // 輸出成員函數(shù)(覆蓋基類(lèi)的 display 函數(shù))
    void display() const {
        People::display();  // 先調(diào)用基類(lèi)的 display 函數(shù)
        std::cout << "職稱(chēng): " << title << std::endl;
    }
};

// 派生類(lèi) Worker
class Worker : public People {
private:
    int workYears;  // 工齡

public:
    Worker(int id, const std::string& name, int workYears)
        : People(id, name), workYears(workYears) {}

    // 輸出成員函數(shù)(覆蓋基類(lèi)的 display 函數(shù))
    void display() const {
        People::display();  // 先調(diào)用基類(lèi)的 display 函數(shù)
        std::cout << "工齡: " << workYears << "年" << std::endl;
    }
};

int main() {
    People p(1, "張三");
    p.display();
    std::cout << std::endl;

    Teacher t(2, "李四", "教授");
    t.display();
    std::cout << std::endl;

    Worker w(3, "王五", 5);
    w.display();
    std::cout << std::endl;

    return 0;
}

在這個(gè)程序中,定義了一個(gè)基類(lèi) People,以及兩個(gè)派生類(lèi) TeacherWorker,并實(shí)現(xiàn)所需的構(gòu)造函數(shù)和輸出成員函數(shù)?;?lèi) People 包含工號(hào)和姓名屬性,并提供了 display 函數(shù)用于輸出成員信息。派生類(lèi) TeacherWorker 分別新增了職稱(chēng)和工齡屬性,并通過(guò)覆蓋 display 函數(shù)實(shí)現(xiàn)了派生類(lèi)成員信息的輸出。

main 函數(shù)中,創(chuàng)建了一個(gè)基類(lèi) People 的對(duì)象 p,以及兩個(gè)派生類(lèi)對(duì)象 TeacherWorker 的對(duì)象 tw。分別調(diào)用它們的 display 函數(shù),輸出各自的成員信息。

程序輸出結(jié)果為:

工號(hào): 1
姓名: 張三

工號(hào): 2
姓名: 李四
職稱(chēng): 教授

工號(hào): 3
姓名: 王五
工齡: 5年

當(dāng)你運(yùn)行這個(gè)程序時(shí),它將創(chuàng)建一個(gè)基類(lèi) People 的對(duì)象 p,并使用構(gòu)造函數(shù)初始化工號(hào)為1,姓名為"張三"。然后調(diào)用 display 函數(shù)輸出該對(duì)象的成員信息:

工號(hào): 1
姓名: 張三

接下來(lái),程序創(chuàng)建一個(gè)派生類(lèi) Teacher 的對(duì)象 t,并使用構(gòu)造函數(shù)初始化工號(hào)為2,姓名為"李四",職稱(chēng)為"教授"。由于 Teacher 類(lèi)中覆蓋了基類(lèi) Peopledisplay 函數(shù),所以在調(diào)用 t.display() 時(shí)會(huì)先調(diào)用基類(lèi)的 display 函數(shù),輸出工號(hào)和姓名,然后再輸出職稱(chēng):

工號(hào): 2
姓名: 李四
職稱(chēng): 教授

然后,程序創(chuàng)建一個(gè)派生類(lèi) Worker 的對(duì)象 w,并使用構(gòu)造函數(shù)初始化工號(hào)為3,姓名為"王五",工齡為5年。同樣地,由于 Worker 類(lèi)中覆蓋了基類(lèi) Peopledisplay 函數(shù),所以在調(diào)用 w.display() 時(shí)會(huì)先調(diào)用基類(lèi)的 display 函數(shù),輸出工號(hào)和姓名,然后再輸出工齡:

工號(hào): 3
姓名: 王五
工齡: 5年

這樣,程序通過(guò)擴(kuò)充繼承實(shí)現(xiàn)了輸出不同類(lèi)的人員信息,并且派生類(lèi)中新增的屬性也得以正確輸出。

這個(gè)程序示例展示了面向?qū)ο缶幊讨械睦^承和多態(tài)的概念?;?lèi) People 定義了所有人員共有的屬性和行為,而派生類(lèi) TeacherWorker 在繼承基類(lèi)的同時(shí)增加了各自獨(dú)有的屬性,并通過(guò)覆蓋基類(lèi)的函數(shù)實(shí)現(xiàn)了特定的行為。這種設(shè)計(jì)使得我們可以在統(tǒng)一的接口下操作不同類(lèi)型的對(duì)象,并根據(jù)對(duì)象的實(shí)際類(lèi)型調(diào)用對(duì)應(yīng)的函數(shù)。

在這個(gè)程序中,我們使用了面向?qū)ο缶幊痰娜筇匦灾唬?strong>繼承。通過(guò)繼承,派生類(lèi)可以從基類(lèi)繼承屬性和方法,并且可以添加自己的額外屬性和方法。這使得我們可以利用代碼的復(fù)用性,避免重復(fù)編寫(xiě)相似的代碼。

在示例中,Teacher 類(lèi)和 Worker 類(lèi)分別是基類(lèi) People 的派生類(lèi)。它們繼承了 People 類(lèi)中的成員變量 idname,并分別新增了屬于自己的成員變量 titleworkYears。

為了實(shí)現(xiàn)繼承,我們使用了 public 訪問(wèn)修飾符來(lái)指定派生類(lèi)對(duì)基類(lèi)成員的訪問(wèn)權(quán)限。具體來(lái)說(shuō),在 Teacher 類(lèi)和 Worker 類(lèi)的定義中,我們使用 : public People 將它們聲明為公有繼承關(guān)系。

此外,在 Teacher 類(lèi)和 Worker 類(lèi)中,我們還覆蓋(override)了基類(lèi) People 中的 display 函數(shù)。通過(guò)使用相同的函數(shù)名稱(chēng)和簽名,派生類(lèi)可以重寫(xiě)(override)基類(lèi)中已經(jīng)存在的函數(shù),并且通過(guò)關(guān)鍵字 override 明確表明這是對(duì)基類(lèi)函數(shù)的重寫(xiě)。在派生類(lèi)中,我們先調(diào)用基類(lèi)的 display 函數(shù),然后再在輸出中添加額外的信息,實(shí)現(xiàn)了對(duì)派生類(lèi)的特定輸出。

這個(gè)示例還展示了多態(tài)(polymorphism)的概念。多態(tài)允許我們通過(guò)基類(lèi)指針或引用來(lái)操作派生類(lèi)對(duì)象,以達(dá)到統(tǒng)一的接口。在 main 函數(shù)中,我們創(chuàng)建了基類(lèi) People 的對(duì)象 p,以及派生類(lèi) TeacherWorker 的對(duì)象 tw。然后,我們分別調(diào)用它們的 display 函數(shù),盡管它們的類(lèi)型不同,但由于多態(tài)性,它們都會(huì)調(diào)用正確的成員函數(shù)來(lái)輸出各自的信息。

總結(jié)起來(lái),繼承和多態(tài)是面向?qū)ο缶幊讨蟹浅V匾母拍?。它們提供了代碼的組織和重用的機(jī)制,使得程序更加靈活和可擴(kuò)展。通過(guò)繼承,我們可以構(gòu)建出更豐富的類(lèi)層次結(jié)構(gòu),通過(guò)多態(tài),我們可以以統(tǒng)一的方式操作不同類(lèi)型的對(duì)象。

西安石油大學(xué)期末考試C++真題解析
西安石油大學(xué)期末考試C++真題解析
西安石油大學(xué)期末考試C++真題解析
西安石油大學(xué)期末考試C++真題解析
西安石油大學(xué)期末考試C++真題解析
西安石油大學(xué)期末考試C++真題解析文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-511419.html

到了這里,關(guān)于西安石油大學(xué)期末考試C++真題解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 西安石油大學(xué)2023年第三屆里奇杯編程大賽(初賽)

    西安石油大學(xué)2023年第三屆里奇杯編程大賽(初賽)

    官方題解地址1v7w (郭毅佬!):https://www.cnblogs.com/1v7w/p/17437203.html 描述 你說(shuō)得對(duì),但是 “ 里奇杯 ” 是西安石油大學(xué)計(jì)算機(jī)協(xié)會(huì)舉辦的程序設(shè)計(jì)競(jìng)賽,比賽旨在激發(fā)同學(xué)們學(xué)習(xí)程序設(shè)計(jì)的熱情,提高編程能力,調(diào)動(dòng)編程的興趣和積極性,在這里,你將扮演名為“參賽選手”

    2024年02月09日
    瀏覽(20)
  • 上機(jī)實(shí)驗(yàn)二 設(shè)計(jì)單循環(huán)鏈表 西安石油大學(xué)數(shù)據(jù)結(jié)構(gòu)

    上機(jī)實(shí)驗(yàn)二 設(shè)計(jì)單循環(huán)鏈表 西安石油大學(xué)數(shù)據(jù)結(jié)構(gòu)

    (1)實(shí)驗(yàn)?zāi)康?掌握線性表的鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu);掌握單循環(huán)鏈表及其基本操作的實(shí)現(xiàn)。 (2)主要內(nèi)容:實(shí)現(xiàn)單循環(huán)鏈表的初始化、求數(shù)據(jù)元素個(gè)數(shù)、插入、刪除、取數(shù)據(jù)元素等操作;用插入法建立帶頭結(jié)點(diǎn)的單循環(huán)鏈表;設(shè)計(jì)一個(gè)測(cè)試主函數(shù)驗(yàn)證所設(shè)計(jì)單循環(huán)鏈表的正確性。 掌握線性

    2024年02月07日
    瀏覽(25)
  • 西安石油大學(xué)數(shù)學(xué)建模校賽培訓(xùn)(2)matlab的使用

    西安石油大學(xué)數(shù)學(xué)建模校賽培訓(xùn)(2)matlab的使用

    MATLAB是MathWorks公司推出的一套高性能數(shù)值分析計(jì)算軟件,其名字來(lái)源于\\\"Matrix Laboratory\\\"(矩陣實(shí)驗(yàn)室)的縮寫(xiě)。它將矩陣運(yùn)算、數(shù)值分析、圖形處理、編程技術(shù)等功能集成在一起,為科學(xué)計(jì)算、工程設(shè)計(jì)和數(shù)據(jù)分析提供了強(qiáng)大的平臺(tái)。MATLAB的特點(diǎn)包括易于使用的高級(jí)編程語(yǔ)言、

    2024年03月28日
    瀏覽(21)
  • 西南石油大學(xué)PTA(期末)編程題題面

    本篇用于本人復(fù)習(xí),部分代碼參考相關(guān)博客(就是看頭文件啦) 祝大家取得好成績(jī) 定義一個(gè)有關(guān)人的 Person 類(lèi),內(nèi)含屬性: String name 、 int age 、 boolean gender 、 int id ,所有的變量必須為私有( private )。 注意: 屬性順序請(qǐng)嚴(yán)格按照上述順序依次出現(xiàn)。 1.編寫(xiě)無(wú)參構(gòu)造函數(shù):

    2024年02月05日
    瀏覽(23)
  • 17屆全國(guó)大學(xué)生智能汽車(chē)競(jìng)賽 中國(guó)石油大學(xué)(華東)智能視覺(jué)組 國(guó)特開(kāi)源

    第一部分:art 矩陣庫(kù) 透視變換 地圖識(shí)別 卡爾曼濾波多目標(biāo)追蹤 第二部分:模型訓(xùn)練 環(huán)境配置 訓(xùn)練 量化 超模型 數(shù)據(jù)增強(qiáng) 目標(biāo)檢測(cè) 所有開(kāi)源代碼已上傳到我的GitHub倉(cāng)庫(kù)。 因?yàn)楹倩丶?,大部分的代碼都在實(shí)驗(yàn)室主機(jī)上。所以開(kāi)源的代碼大部分重新編寫(xiě)過(guò),沒(méi)有經(jīng)過(guò)上車(chē)測(cè)

    2024年02月11日
    瀏覽(47)
  • 湖南大學(xué)CS-2021期末考試解析

    湖南大學(xué)CS-2021期末考試解析

    【特別注意】 答案來(lái)源于@wolf 是我在備考時(shí)自己做的,僅供參考,若有不同的地方歡迎討論。 【試卷評(píng)析】 有必要一做。 【試卷與答案】 ? ? 小明設(shè)計(jì)了一款機(jī)器,整數(shù)和浮點(diǎn)數(shù)都占 10 個(gè) bit,其中整數(shù)采用補(bǔ)碼表示,浮點(diǎn)數(shù)采用 IEEE 754 標(biāo)準(zhǔn)。 (1)整數(shù)的表示范圍是多少

    2024年02月08日
    瀏覽(35)
  • 湖南大學(xué)CS-2019期末考試解析

    湖南大學(xué)CS-2019期末考試解析

    【特別注意】 答案來(lái)源于@wolf 是我在備考時(shí)自己做的,僅供參考,若有不同的地方歡迎討論。 【試卷評(píng)析】 有必要一做。 【試卷與答案】 ? 1. 0xb1e56f07 存放在采用小端存儲(chǔ)的機(jī)器上,地址為 0x3287 到 0x328a ,則 0x3288 處存 放值為 ______( 以十六進(jìn)制小寫(xiě)格式表示例 0xff) 。 2.

    2024年02月08日
    瀏覽(43)
  • C++程序設(shè)計(jì)期末考試復(fù)習(xí)試題及解析 3(自用~)

    C++程序設(shè)計(jì)期末考試復(fù)習(xí)試題及解析 3(自用~)

    可以很清楚看到淺拷貝所造成的錯(cuò)誤:在析構(gòu)的時(shí)候會(huì)重復(fù)析構(gòu),這是由于淺拷貝時(shí),b的buffer指針和a的buffer指針指向的是同一片空間 如何更改? 換為深拷貝! 即棄用默認(rèn)拷貝構(gòu)造函數(shù),自己寫(xiě)一個(gè)拷貝構(gòu)造函數(shù) 改為深拷貝后,a、b對(duì)象不會(huì)相互影響,由于b未調(diào)用set()函

    2024年02月09日
    瀏覽(19)
  • 基于微信陜西西安某大學(xué)在線考試小程序系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 研究背景和意義、國(guó)內(nèi)外現(xiàn)狀

    ?博主介紹 :黃菊華老師《Vue.js入門(mén)與商城開(kāi)發(fā)實(shí)戰(zhàn)》《微信小程序商城開(kāi)發(fā)》圖書(shū)作者,CSDN博客專(zhuān)家,在線教育專(zhuān)家,CSDN鉆石講師;專(zhuān)注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門(mén)到精通的基礎(chǔ)知識(shí)視頻課程,免費(fèi) 項(xiàng)目配有對(duì)應(yīng)開(kāi)發(fā)文檔、開(kāi)題報(bào)告、任務(wù)書(shū)、

    2024年01月17日
    瀏覽(21)
  • linux大學(xué)期末考試題庫(kù)

    1、小明想在linux的tmp臨時(shí)目錄下新建一個(gè)名為“ruanjian”的目錄,請(qǐng)寫(xiě)出新建目錄的linux命令;然后進(jìn)入這個(gè)“ruanjian”目錄,在當(dāng)前目錄下新建一個(gè)空文件,名為“jiying.txt”,請(qǐng)寫(xiě)出相應(yīng)命令;在當(dāng)前目錄下,小明想將主目錄下的文件夾“hello”及其子目錄和文件都復(fù)制到當(dāng)前

    2024年02月08日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包