C++关键字-const深入剖析

本文探讨了C++中const关键字的应用,特别是常对象成员的初始化。通过示例代码,解释了为何常对象成员必须在初始化列表中赋值,并介绍了const如何用于函数重载的区分。此外,还指出了构造函数中const的限制及其错误情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前也写过相关的文章讨论const关键字,但在不断学习后还是发现自己对它的认识还是不够,为此在此学习const的用法。

      在阅读下面的内容之前可以先看看往期的博文:优快云icon-default.png?t=M4ADhttps://mp.youkuaiyun.com/mp_blog/creation/editor/123943107

话不多说,先上代码:

#include<iostream>
using namespace std;
class A
{
private:
	 const int a;                // 常对象成员,只能在初始化列表赋值
	 //int a;
public:
	// 构造函数
	/*int text(int m)
	{
		a = m;
	}*/
	A() : a(0) { cout << a << endl; }
	A(int x) : a(x) { };      // 初始化列表

	// const可用于对重载函数的区分
	int getValue();             // 普通成员函数
	int getValue()const ;       // 常成员函数,不得修改类中的任何数据成员的值
};
int main()
{
	A a;

	system("pause");
	return 0;
}

别小看这一段代码,里面包含的内容是很多的。

1.private:

    const int a;

我们知道这是在类内定义了一个int型常量,那么我们怎么给它赋初值呢?

首先在类里面这个数据是私有的,这意味着我们没办法通过类外定义对象,用对象给它赋值,一般情况我们都是在类内用成员函数给它赋值或者直接在构造函数里赋值,现在我们把两种方法都试一试。

1.1成员函数赋值

public:
	// 构造函数
	int text(int m)
	{
		a = m;
	}

软件是visual studio,结果提示两个错误:

第二个错误我们后面再说,第一个错误告诉我们在成员函数里面给常量赋值是不行的

即使改为

int text(int m)const;

或者

int text(const int m) //错误

或者

int text(int m):a(m){ };  //错误

我们知道如果不给成员赋初值,编译器会给我们一个默认的构造函数和析构函数,用来给成员赋值,但在这里我们发现出现了问题,默认的构造函数没办法给常对象成员赋值。系统报错说我们无法引用“A”的默认构造函数。

1.2构造函数赋值

public:
  A(const int m)
	{
		a = m;
	}

结果同样错误,错误类型也相同,但是用初始化列表赋值就可以。

public:
    A() : a(0) { cout << a << endl; }
	A(int x) : a(x) { };      // 初始化列表

所以我们得到一个结论:常对象成员,只能在初始化列表赋值。

2.const可以用作函数重载的区分

int getValue();             // 普通成员函数
int getValue()const ;       // 常成员函数,不得修改类中的任何数据成员的值

在之前了解的函数重载的方法是函数的参数列表的参数个数不同,参数类型不同,同时函数的返回值类型是不能作为函数重载的条件的,今天又学到一个,之前一直没有注意到这一点,它的用法也可以参考我之前的文章。

但不需要注意的是,构造函数不能用这样的方法重载,上面说的参数个数和类型还是适用于构造函数的,但const不行。

否则会出现如上错误。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

什么时候上岸?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值