c++ const修饰符

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

结果

ake func 1
2
take func 10
take func 100

上面getCount()方法中调用了一个add方法,而add方法并非const修饰,所以运行报错。也就是说const对象只能访问const成员函数。
而add方法又调用了const修饰的take方法,证明了非const对象可以访问任意的成员函数, 包括const成员函数。
除此之外,我们也看到add的一个重载函数,也输出了两个结果,说明const对象默认调用const成员函数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容