c++常对象与常成员函数

一、常对象

概述

常对象是指声明为 const 的对象。常对象在声明后,其成员变量不能被修改,也不能调用非常量成员函数。

声明与调用

#include <iostream>
using namespace std;

class MyClass {
private:
    int value;

public:
    MyClass(int v) : value(v) {}

    void setValue(int v) {
        value = v;
    }

    int getValue() const {
        return value;
    }

    void display() const {
        cout << "Value: " << value << endl;
    }
};

int main() {
    const MyClass obj(10); // 声明一个常对象
    // obj.setValue(20); // 错误:不能调用非常量成员函数
    cout << obj.getValue() << endl; // 可以调用常成员函数
    obj.display(); // 可以调用常成员函数
    return 0;
}

二、常数据成员

概述

常数据成员在类定义中用 const 关键字声明。这些成员变量必须在构造函数的初始化列表中进行初始化,并且一旦初始化后,其值不能被改变。

声明与调用

#include <iostream>
using namespace std;

class MyClass {
private:
    const int value; // 声明常数据成员

public:
    MyClass(int v) : value(v) {} // 必须在初始化列表中初始化

    int getValue() const {
        return value;
    }
};

int main() {
    MyClass obj(10); // 声明一个对象并初始化常数据成员
    cout << obj.getValue() << endl;
    // obj.value = 20; // 错误:常数据成员不能被修改
    return 0;
}

声明:在类定义中使用 const 关键字声明数据成员,并在构造函数的初始化列表中初始化。

class MyClass {
    const int value;
public:
    MyClass(int v) : value(v) {}
};

调用:常数据成员的值在对象的生命周期内不能被修改。

MyClass obj(10);
// obj.value = 20; // 错误:常数据成员不能被修改

三、常成员函数

概述

常成员函数是在成员函数的声明和定义中使用 const 关键字,表示该成员函数不会修改对象的成员变量,并且可以被常对象调用。

声明与调用

#include <iostream>
using namespace std;

class MyClass {
private:
    int value;

public:
    MyClass(int v) : value(v) {}

    void setValue(int v) {
        value = v;
    }

    int getValue() const {
        return value;
    }

    void display() const { // 声明常成员函数
        cout << "Value: " << value << endl;
    }
};

int main() {
    MyClass obj(10); // 声明一个普通对象
    obj.display(); // 可以调用常成员函数
    obj.setValue(20); // 可以调用非常量成员函数
    obj.display();

    const MyClass constObj(30); // 声明一个常对象
    constObj.display(); // 常对象也可以调用常成员函数
    // constObj.setValue(40); // 错误:不能调用非常量成员函数
    return 0;
}

声明:在成员函数的声明和定义中使用 const 关键字。

class MyClass {
public:
    int getValue() const;
};

调用:常成员函数可以被常对象和普通对象调用,常成员函数不能修改成员变量。

const MyClass obj(10);
obj.getValue(); // 常对象可以调用常成员函数

主要区别总结

  1. 修饰符

    • 常成员函数在声明和定义时使用 const 关键字。
    • 普通成员函数没有 const 关键字。
  2. 修改成员变量

    • 常成员函数不能修改类的成员变量。
    • 普通成员函数可以修改类的成员变量。
  3. 调用权限

    • 常成员函数可以被常对象和非常对象调用。
    • 普通成员函数只能被非常对象调用,不能被常对象调用。
  4. 保证不变性

    • 常成员函数承诺不会修改对象的状态,提供了一种编译时的保证。
    • 普通成员函数没有这样的承诺,可以修改对象的状态。
  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值