const
class Apple
{
private:
int people[100];
public:
Apple(int i);
const int apple_number;
void take(int num) const;
int add(int num);
int add(int num) const;
int getCount() const;
};
//main.cpp
include<iostream>
include<ostream>
include"apple.cpp"
using namespace std;
Apple::Apple(int i) :apple_number(i)
{
}
int Apple::add(int num)
{
take(num);
return 0;
}
int Apple::add(int num) const
{
take(num);
return 0;
}
void Apple::take(int num) const
{
cout << "take func " << num << endl;
}
int Apple::getCount() const
{
take(1);
// add(); //error
return apple_number;
}
int main() {
Apple a(2);
cout << a.getCount() << endl;
a.add(10);
const Apple b(3);
b.add(100);
return 0;
}
編譯: g++ -o main main.cpp apple.cpp
結(jié)果
ake func 1
2
take func 10
take func 100
上面getCount()方法中調(diào)用了一個add方法移宅,而add方法并非const修飾访惜,所以運行報錯。也就是說const對象只能訪問const成員函數(shù)萍虽。
而add方法又調(diào)用了const修飾的take方法,證明了非const對象可以訪問任意的成員函數(shù), 包括const成員函數(shù)形真。
除此之外杉编,我們也看到add的一個重載函數(shù)超全,也輸出了兩個結(jié)果,說明const對象默認(rèn)調(diào)用const成員函數(shù)