第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以下內(nèi)容是關(guān)于在C++中const 用法求解,求助~

以下內(nèi)容是關(guān)于在C++中const 用法求解,求助~

C++
縹緲止盈 2021-11-25 21:15:20
#include"iostream"using namespace std;class A{public:virtual void f(){cout<<"A::f()"<<endl;}void f()const{cout<<"A::f() const"<<endl;}};class B: public A{public:void f(){cout<<"B::f()"<<endl;}void f()const{cout<<"B::f() const"<<endl;}};void g(const A* a){a->f();} int main(){A* a=new B();a->f();g(a);delete a;system("pause");return 0;}求解 g(a)輸出為什么是A::f() const當(dāng)將函數(shù)g(const A*a)中const 去掉是輸出結(jié)果為B::f()
查看完整描述

2 回答

?
千巷貓影

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個贊

g(const A*a)時,傳入的是B類對象指針,B類繼承A類void f()const,a只能訪問B繼承的A的部分。
const修飾的對象只能調(diào)用const成員函數(shù),a->f();輸出A::f() const
而去掉const后,A類指針被子類初始化,a->f(),根據(jù)虛函數(shù)帶來的多態(tài)性,具體調(diào)用哪個函數(shù)由運(yùn)行時確定,發(fā)現(xiàn)this指向B類,所以輸出B::f()

查看完整回答
反對 回復(fù) 2021-11-29
?
ITMISS

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個贊

首先,a是一個指向B類對象的指針。

其次,
void f()const{
cout<<"A::f() const"<<endl;
}
的const是函數(shù)的“特征標(biāo)”之一,所以,這個f函數(shù)和另一個f函數(shù)構(gòu)成重載。

最后,常對象(或者是指向常對象的指針),將會調(diào)用const函數(shù),如果沒有const函數(shù)只有非const函數(shù),將報錯;非常對象(即沒有被const修飾的普通對象)則會優(yōu)先調(diào)用非const函數(shù),如果沒有非const函數(shù)只有const函數(shù),將會調(diào)用const函數(shù)。

然后是分析:

求解 g(a)輸出為什么是A::f() const
答:因?yàn)間函數(shù)接收到參數(shù)后,給它加了個const修飾,所以,g函數(shù)內(nèi)的a是一個指向常對象的指針。void f()const這個函數(shù)不是虛函數(shù),所以它被B類直接繼承了,意思是說,B類其實(shí)是有一個
void f()const{
cout<<"A::f() const"<<endl;
}
這樣的函數(shù)的。然后,g內(nèi)的a->f();調(diào)用的就是B類(因?yàn)閍是一個指向B類對象的指針)里的void f()const函數(shù)。

當(dāng)將函數(shù)g(const A*a)中const 去掉是輸出結(jié)果為B::f()
答:去掉const之后,g函數(shù)里的a只是一個指向非常對象(即沒有被const修飾的普通對象)的指針,將會優(yōu)先調(diào)用非const函數(shù),B中剛好有一個重寫了A類那個沒有const的f函數(shù)的f函數(shù),所以就調(diào)用了它。



查看完整回答
反對 回復(fù) 2021-11-29
  • 2 回答
  • 0 關(guān)注
  • 307 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號