自己做的網(wǎng)站怎么弄成app中國聯(lián)通騰訊
個人主頁:Lei寶啊?
愿所有美好如期而遇
前言:
將const 修飾的 “ 成員函數(shù) ” 稱之為 const 成員函數(shù) , const 修飾類成員函數(shù),實際修飾該成員函數(shù) 隱含的 this 指針 ,表明在該成員函數(shù)中不能對類的任何成員進行修改。
class Date
{
public:Date():_year(2023),_month(10),_day(28){}void print() const //const限定this指針,相當于const Date* this{cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day;
};int main()
{Date a;a.print();return 0;
}
思考下面的幾個問題:
1. const對象可以調(diào)用非const成員函數(shù)嗎?
class Date
{
public:Date():_year(2023),_month(10),_day(28){}void print1() const //const限定this指針,相當于const Date* this{cout << _year << "-" << _month << "-" << _day << endl;}void print2(){cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day;
};int main()
{Date a;a.print1();const Date b;b.print1();return 0;
}
編譯器甚至都沒有給出print2這個函數(shù)的選項,答案自然是不能,但為什么不能呢??

我們定義的對象b是const類型,他的成員變量不能做修改,那他的別名的成員變量也不能修改,而我們上述代碼中b對象不能調(diào)用print2函數(shù)是因為print2函數(shù)有權(quán)限放大,所以不能調(diào)用。
2. 非const對象可以調(diào)用const成員函數(shù)嗎?
?
class Date
{
public:Date():_year(2023),_month(10),_day(28){}void print1() const //const限定this指針,相當于const Date* this{cout << _year << "-" << _month << "-" << _day << endl;}void print2(){cout << _year << "-" << _month << "-" << _day << endl;}private:int _year;int _month;int _day;
};int main()
{Date a;a.print1();const Date b;b.print1();Date c;c.print2();return 0;
}

?

權(quán)限放大不可以,但可以有權(quán)限的縮小,c對象成員變量可以修改,也可以不修改,他的別名成員變量不可以修改是合理的。
3. const成員函數(shù)內(nèi)可以調(diào)用其它的非const成員函數(shù)嗎?


4. 非const成員函數(shù)內(nèi)可以調(diào)用其它的const成員函數(shù)嗎?

?這里是權(quán)限的縮小,是OK的
?