C++ const成员和引用类型成员

本文详细阐述了C++中const成员变量的初始化规则,const成员函数的特性(包括常量属性、调用限制和与非const成员函数的重载),以及引用类型成员的处理。重点介绍了如何区分const成员函数与普通函数,以及它们的调用方式。
摘要由CSDN通过智能技术生成

1.定义

定义:被 const 修饰的成员

被const修饰的成员变量、非静态成员函数

2.const 成员变量

必须初始化(类内部初始化),可以在声明的时候直接初始化赋值
非static的const成员变量还可以在初始化列表中初始化

class Car {
public:

// 两种赋值方法:
	// 在声明的时候直接初始化赋值
	const int m_price;
	// 在初始化列表中初始化
	Car() :m_price(0) {
	}
};

3.const成员函数(非静态)

1.const关键字写在参数列表后面,函数的声明和实现都必须带const
2.内部不能修改非static成员变量
3.内部只能调用const成员函数、 static成员函数
4.非const成员函数可以调用const成员函数
5.const成员函数和非const成员函数构成重载
6.非const对象(指针)优先调用非const成员函数
7.const对象(指针)只能调用const成员函数、 static成员函数

class Car {
public:
	// const int m_price;
	// Car() :m_price(0) {}
	int m_price;

	void run() const {
		cout << "run() const" << endl;

	}

	/*void run() {
		cout << "run()" << endl;
	}*/
};
  • 内部只能调用const成员函数、 static成员函数
    下面错误示例:在run() const中调用成员函数 test(),编译器报错
class Car {
public:
	// const int m_price;
	// Car() :m_price(0) {}
	int m_price;

	void run() const {
		cout << "run() const" << endl;
		// 无法调用
		test();

	}

	void test() {
	}
};
  • const成员函数和非const成员函数构成重载
    下面的 run() 和 run() const 可以构成重载
class Car {
public:
	// const int m_price;
	// Car() :m_price(0) {}
	int m_price;

	void run() const {
		cout << "run() const" << endl;
	}

	void run() {
		cout << "run()" << endl;
	}
};

调用方式:用普通对象调用,调用的是 run();
用 const 创建对象,调用的是 run() const。

int main() {
	Car car;
	car.run();

	const Car car2;
	car2.run();

	getchar();
	return 0;
}

p.s:const 成员函数 和 普通成员函数 的区别就是函数内部的成员变量是否可以修改。

4.引用类型成员

引用类型成员变量必须初始化(不考虑static情况)
在声明的时候直接初始化
通过初始化列表初始化

class Car {
int age;
int &m_price = age;
public:
	Car(int &price) : m_price(price){
	}
};
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值