const - 常見錯誤(一)
報錯:
error C2662: “Man::play”: 不能將“this”指針從“const Man”轉換爲“Man &”
#include <iostream>
using namespace std;
class Man
{
public:
Man()
{
}
void play()
{
cout<<"I am playing ..."<<endl;
}
};
int main(void)
{
const Man man;
man.play(); /* 這裏會報錯 */
system("pause");
return 0;
}
原因:
man 是 const 對象, 但是卻調用了非 const 方法.
類比: 專一男, 不能去夜店玩耍[因爲這樣很危險, 可能導致專一男變心]
解決方案:
方案一:
把 const Man man; 修改爲: Man man;
方案二:
把 play 方法, 修改爲 const 方法
const - 常見錯誤(二)
正確的代碼demo1
#include <iostream>
using namespace std;
class Man
{
public:
Man()
{
}
void play()
{
cout<<"I am playing ..."<<endl;
}
};
void test(Man &man)
{
man.play();
}
int main(void)
{
Man man1;
test(man1);
system("pause");
return 0;
}
正確的代碼demo2
#include <iostream>
using namespace std;
class Man
{
public:
Man()
{
}
void play() const
{
cout<<"I am playing ..."<<endl;
}
};
void test(const Man &man)
{
man.play();
}
int main(void)
{
const Man man1;
test(man1);
Man man2;
test(man2);
system("pause");
return 0;
}
總結:
原因: 非 const 引用, 不能對 const 變量進行引用
注意: const 引用, 可以對非 const 變量進行引用
解決方案:
修改引用變量, 或者被引用的變量
以上畫圖理解
結語:
加油, 繼續努力!!! 量變引起質變
時間: 2020-06-21-11-41