C++ const型成员函数与 non-const型成员函数

来源:互联网 发布:js map remove 编辑:程序博客网 时间:2024/04/29 13:23

首先一点,二者是可以构成重载的,仅根据返回值的 const/non-const 与否是无法构成重载的;

class A{public:    void foo() {}                          // 非 const 型成员};void foo(const A& a){    a.foo();                        // 编译器报错                        // 对象包含与成员函数不兼容的类型限定符}

改造为:

class A{public:    void foo() { std::cout << "A::foo()" << std::endl;}    void foo() const {std::cout << "A::foo() const" << std::endl; }                                    // 两者可以构成重载};void foo(const A& a){ a.foo(); }                        // 调用的是const型成员函数函数void foo2(A& a){ a.foo(); }                        // 调用的是 non-const 型成员函数

再看一个更为直观的例子:

class A{public:    void foo() const { std::cout << "A::foo() const" << std::endl;}    void foo() { std::cout << "A::foo()" << std::endl;}    void foo2() { std::cout << "A::foo2()" << std::endl; }};int main(int, char**){    A a;    a.foo();                    // 重载时,non-const 的对象自动访问 non-const 的成员方法    a.foo2();    const A aa;    aa.foo();                    // aa.foo2(); 会报错                    // const 的仅能访问const 的    return 0;}
0 0
原创粉丝点击