c++类中const的使用

发布时间:2024年01月12日

目录

const修饰成员变量

1.使用: ?

2.初始化:?

3)?注意:

const修饰成员方法和对象?

1)使用:?

1. 修饰对象:

2.修饰成员函数:被const修饰的成员函数,在其内部无法修改成员属性(包括非const限定的)。

3.两者的关系:?

4. 原因:?

5.建议:

?

const修饰成员变量

?const其实C语言中也经常使用,就是将变量设置为只读---? 只能读数据,不能该数据

1.使用: ?

定义一个人的类,我们的身份证号不能随便修改,这时候就可以定义成const类型。?

class Human {
public:
	Human();
private:
	int age;
	string name;
	const int idCard = 0;  // 设置初始值
};

Human::Human(){
	age = 18;
	name = "学习";
	// idCard = 10;//  报错
}

代码中,idCard被设置为只读,是无法修改的,如果修改就会报错。??

2.初始化:?

1)方法一: 直接初始化

? ? ?就是上面代码使用的方法,在定义时直接初始化。?

2)方法二: 使用初始化列表 -- 建议使用

方法一的缺点:?

? ? ?方法一在c++11之后才支持,而且const的量初始化之后就不能改了,比定义的时候怎么知道其值为多少?(就比如,当出生,没有身份证的时候,你是不知道身份证号的)。?

这时候就要使用方法二:?

class Human {
public:
	Human(int age, string name, int idCard);
private:
	int age;
	string name;
	const int idCard;  // 设置初始值
};

Human::Human(int age, string name, int idCard):age(age),name(name),idCard(idCard){

}

我们使用有参构造创建对象的时候,初始化列表会根据相应的参数给相应的成员变量初始化。?

语法在参数后面加一个: 然后成员(参数),多个之间用,隔开。?

3)?注意:

const修饰的量只能在初始化列表中初始化,不能在函数内部进行初始化。?

?

const修饰成员方法和对象?

1)使用:?

1. 修饰对象:

假设,我们有两个人类的对象,我们希望一个对象中数据初始化之后就不修改(可以将它定义为const类型),而另外一个则可以修改非const修饰的量。?

注意: 对上面这段话,表示对于可修改的属性,有些对象可以改变,有些对象不可以改变。

class Human {
public:
	Human(string name, int idCard);
	string getName() const;
	int getIdCard() const;
	void setName(const char* name);
private:
	string name;
	const int idCard;  // 设置初始值
};

Human::Human(string name, int idCard):name(name),idCard(idCard){

}

string Human::getName() const{
	// name = "学习"; // const修饰的函数中不能修改数据
	return name;
}

int Human::getIdCard() const {
	// idCard = 10; // 不能修改
	return idCard;
}

void Human::setName(const char* name) {
	name = "值"; // 非const限定的函数可以修改内部的值
	this->name = name;
}

int main(void) {
	const Human man("学习",123456);
	Human man1("努力", 654321);

	system("pause");

	return 0;
}

代码中,我们定义了两个对象,一个使用const限定。被const限定的对象,其内部的值是不可以改变的。?

2.修饰成员函数:被const修饰的成员函数,在其内部无法修改成员属性(包括非const限定的)。

上面代码中,?定义了两个const类型,getName和getIdCard。

语法:? 在函数声明和定义的时候,在函数的后面就一个const。

3.两者的关系:?

上面说到,其实在const限定的对象内部,它的成员变量都是可修改的。如果不被const限定,是可以正常修改的。?

但是,我们知道,对于普通函数,在其内部可以随意修改非const修饰的成员变量(代码中已经体现)。但是,const限定的函数,是不可以修改的。?

?所以,这就导致,const限定的对象,只能调用const修饰的函数。?

4. 原因:?

?对于非const限定的成员变量,在函数中我们可以随意修改它们的值。对于这样的变量,我们有的对象希望它改变,而有的对象希望它不变。(所以你也不能将它直接设置为const,因为那样谁也改不了了)。

既然普通函数可以修改这个变量,那不希望变量改变的对象(const修饰的对象),就不能去调用这样的函数了。因为它会改变值的。?

const限定的函数,其内部是无法修改任何值的,所以对于const对象可以放心调用,因为它改不了你的值。?(当然这样的函数非const限定的对象也能调用。你都允许改了,那不改的当然也能)

5.建议:

当我们函数内部不去修改成员数据的值的时候,就将它设置为const类型。(比如读取数据的函数等)

?

文章来源:https://blog.csdn.net/weixin_68026222/article/details/135546585
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。