OJ:访问 const 成员函数问题

Posted Zackary.Liu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OJ:访问 const 成员函数问题相关的知识,希望对你有一定的参考价值。

Description

补足程序使得其输出结果是:

40

#include <iostream>
#include <string>
using namespace std;

struct A {
    int n;
    A() { };
    A(int n_ ):n(n_) { }
// Your Code Here
};
int main()
{
    A c;
    const A a(10);
    c = a + A(30);
    cout << c.n << endl; 
    return 0;
}

Output

40

解法如下:

#include <iostream>
#include <string>
using namespace std;

struct A {
    int n;
    A() { };
    A(int n_ ):n(n_) { }
    
    int operator+(struct A b) const{
        return this->n + b.n;
    }
};
int main()
{
    A c;
    const A a(10);
    c = a + A(30);
    cout << c.n << endl; 
    return 0;
}

本题注意事项:C++ 中 const 修饰的对象只能访问该对象的 const 函数,因为其他函数有可能会修改该对象的成员,编译器为了避免该类事情发生,会认为调用非 const 函数是错误的。函数末尾加 const,表示不会修改该对象的成员。

以上是关于OJ:访问 const 成员函数问题的主要内容,如果未能解决你的问题,请参考以下文章

如何编写一个返回对成员对象的引用的 const 访问器,以便可以对其进行编辑?

C++,成员函数返回对包含指向 const 对象的指针的向量的 const 引用

C++面向对象-static、const

C++ const 修饰符

statuc和const

构造函数中调用的代码比 lambda 更简单,该构造函数使用输出参数函数来初始化 const 成员