类内CONST

/*
const 不可以用于构造与析构
创建对象的时候加const,是常量对象,无法修改数据,只能引用尾部有 const 的方法
类的成员如果是const 初始化有二种方式。一:默认初始化,第二构造初始化,但不可以在构造函数内部初始化
类中的const 变量成员,无法直接修改,可以间接修改
类成员函数,返回值是const饰的,返回是常量。
参数是const修饰的,参数只可读不可写。
尾部是const修饰的,常量对象只能调用尾部修饰的const函数

*/
#include<iostream>

using namespace std;

class MyClass
{
public:
	int x;
	int y;
	//const int z =3; //常量数据的初始化:1:定义时直接初始化、
	//2:构造函数之后,MyClass(int a, int b) :x(a), y(b), z(a+b) 不允许构造函数内部初始化
	const int z ;  //常量必须初始化

	MyClass(int a, int b) :x(a), y(b), z(a+b)
	{
		//z = a + b;	//不允许这样初始化常量。
	}
	void show()
	{
		cout << "x:" << x << " y:" << y << endl;
	}
	
	void showit()const
	{	//只能读不能写
		//x = 99;
		cout << "x:" << x << " y:" << y << endl;
	}
	//保护参数不能被修改
	void change(const int a, const int b)
	{
		x = a;
		y = b;
	}
	//返回常量
	const int get()const
	{
		return x;
	}
};

void main16A()
{
	MyClass mc(10, 20);
	
	mc.show();
	mc.showit();

	//常量对象,只能调用带 const 的方法,并无法修改数据。
	const MyClass mc1(20, 30);
	cout << mc1.z << endl;
	//mc1.show();  //不能将“this”指针从“const MyClass”转换为“MyClass &
	mc1.showit();
	
	
	int *p = const_cast<int *>(&mc.z);
	*p = 30;	//间接修改
	cout << mc.z << endl;


	cin.get();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值