c/c++中const成员函数的返回值类型

const成员函数又称为访问函数,在const函数体内不能修改成员变量的值。

那么对于const函数的返回值呢?

结合网上内容,写了一个小的实验代码,

class T{
public:
	struct pNode{
		int x;
		int y;
	};
	//在const内修改成员变量的值,错误
	void modify() const{ 
		p1.x = 10;//p1是对象,p1的内容包括了x和y,所以修改p1中的x是不对的。
	}

	//想访问pNode中的x,但返回类型不对,应该是const int &。
	int & get1() const{
		return p1.x;//p1是对象,p1的内容包括了x和y,如果提供int &型的引用,那么在主函数中可通过get1()=10来修改p1.x
	}               //破坏了封装性

	//get()函数虽然没有报错,但不安全,因为这样破坏了封装。
	int & get() const{//为什么没有报错?因为p是指针,我们并没有直接修改p指针,也没有为p提供引用类型的返回
		return p->x;  //但为什么又破坏封装性了呢?在于返回值类型int &。int &为p->x提供了一个引用借口,
	}                 //在主函数中我们可以使用 get()=10; 这样的语句来修改p->x的值。

	const pNode* & getp() const{//返回指针的常引用
		return p;//按理说是正确的啊,按实际却是错的。为什么???
	}

private:
	pNode *p; 
	pNode p1;
};

针对最后一个函数的问题,又写了个小测试:

	int a = 10;
	int b = 100;
	int *p = &a; //正确
	int* & p2 = p;//正确,p2是p的引用
	const int* p3 = p;//正确,p3是常量指针
	p3 = &b;//改变p3,p不会改变的
	//const int* & p3 = p;//错误。这是从"指针的常引用"的角度来写的。提示:无法用"int *"类型的值初始化"const int* &"类型的引用(非常量限定)
	const int* & p4 = p3;//正确。这是从"常量指针的引用"的角度来写的。p4是常量指针p3的引用。
	p4 = &a;//改变p4,p3也会改变的
	//const int* &应该读成“常量指针的引用”还是“指针的常引用”????
	//从上面例子看,应该读成“常量指针的引用”。
	//这只是表面现象,本质还是不清楚.........??????
	const const int* & p5 = p3;//是不是称作“常量指针的常引用”???
	p5 = &b; //如果是,那么此处修改p5并不会影响p3,但实际上p3也改变了........??????
还有一些问题不懂。。。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值