美文网首页
C++常对象-常函数-常成员变量

C++常对象-常函数-常成员变量

作者: 突击手平头哥 | 来源:发表于2019-11-23 23:20 被阅读0次

C++常对象-常函数-常成员变量

C++常对象

C++常对象, 就是使用const修饰的类实例!
const A a;

C++常对象有什么限制

1, 无法修改内部成员; 2, 无法调用普通函数

class TestA
{
public:
    TestA(){};
    int a;
    void fun1 (){}
};

int main()
{
    TestA const ta;
    ta.fun1();
    ta.a = 1;

    return 0;
}

//结果: 编译错误
test.cpp: In function 'int main()':
test.cpp:13:10: error: passing 'const TestA' as 'this' argument discards qualifiers [-fpermissive]
  ta.fun1();
          ^
test.cpp:7:7: note:   in call to 'void TestA::fun1()'
  void fun1 (){}
       ^~~~
test.cpp:14:9: error: assignment of member 'TestA::a' in read-only object
  ta.a = 1;
         ^

结果: 无法调用普通的函数和修改成员变量, 不过需要注意的是passing 'const TestA' as 'this'这一句; 说明我们需要定义首参为const this的成员函数.

C++常函数

C++常函数, 就是类的成员函数, 在花括号之前添加一个const修饰this的函数
void fun1 () const{}

ps: 如果是在func1前的const仅是修饰返回值而已. 这里的cosnt实际修饰的就是this

那么C++常对象和普通对象是否可以调用呢?

class TestA
{
public:
    TestA(){};
    int a;
    void fun1 () const{}
};

int main()
{
    TestA const ta;
    ta.fun1();

    TestA tb;
    tb.fun1();

    return 0;
}

结果:编译成功, 可以调用.

ps: 这里传入的是一个const修饰的常对象, 所以在常对象中我们无法调用非常函数和修改任何成员变量.

C++常成员变量

const int a;

C++常成员变量, 只能在初始化阵列中初始化, 此后都不再可以修改.

相关文章

网友评论

      本文标题:C++常对象-常函数-常成员变量

      本文链接:https://www.haomeiwen.com/subject/bnukwctx.html