随笔 - 1762  文章 - 0  评论 - 109  阅读 - 431万

关于C++类的成员函数是否要加关键字“const”

原则:类的成员函数在小括号后大括号前加上 const ,代表不准备改变对象的数据。不加的话代表有可能会改变对象的数据。

1.当常量对象,就是加上const修饰的类的成员去调用常量成员函数时,这表示:对象的初始化数据一定不能改变,常量成员函数说:放心,我不会改变你的初始化数据的,这一切都很好。

2.当常量对象调用没加const修饰的类的成员函数时,这表示:对象的初始化数据一定不能改变,非常量成员函数说:我不能保证哦!完犊子,没商量好,这要出问题。

3.当非常量对象调用常量成员函数时,这表示:对象的初始化数据可以被改变,常量成员函数说:我并不打算改变你的数据。这,很和谐!

4.当非常量对象调用非常量成员函数时,这表示:对象的初始化数据可以被改变,非常量成员函数说:你调用我,我有可能会改变你的数据哦,这个对象说:改就改喽,我本来就没打算一辈子不改。嗯,气氛还挺好。

举例:

singledog.h头文件:

复制代码
#pragma once
#include<iostream>
using namespace std;
class SingleDog
{
public:
    SingleDog(int id, int age, const char* city);
    int get_ID() const { return ID; }
    int get_Age() const { return Age; }
    const char* get_City() const { return City; }
    void set_ID(int id) { ID = id; }
    void play();
    ~SingleDog();

private:
    int ID;
    int Age;
    const char* City;
};

SingleDog::SingleDog(int id,int age,const char* city):ID(id),Age(age),City(city)
{
    cout << "构造函数被调用" << endl;
}
void SingleDog::play()
{
    cout << "我喜欢打篮球" << endl;
}

SingleDog::~SingleDog()
{
}
View Code
复制代码

singledog.cpp源文件:

复制代码
#include"singledog.h"
int main()
{
    SingleDog sd1(123, 23, "shanghai");
    cout <<"Age: "<< sd1.get_Age() << endl;
    cout << "ID: " << sd1.get_ID() << endl;
    cout << "City: " << sd1.get_City() << endl;

    sd1.set_ID(456);
    cout << "ID: " << sd1.get_ID() << endl;

//***********************************************//

    const SingleDog sd2(123, 23, "shanghai");
    cout << "Age: " << sd2.get_Age() << endl;
    cout << "ID: " << sd2.get_ID() << endl;
    cout << "City: " << sd2.get_City() << endl;

    //sd2.set_ID(456);//注意,常量对象调用非常量成员函数了,这一句调用会出错!!!
    cout << "ID: " << sd1.get_ID() << endl;

    system("pause");
    return 0;
}
View Code
复制代码

 小结:设计类的成员函数时,只要不准备改变对象的数据,就加上const去修饰。一出手就要不凡。(侯捷老师的话,哈哈哈)

posted on   一杯明月  阅读(588)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示