c++关于引用和const的一些问题

问题起由:

在学习句柄类的时候(到现在还没明白)敲击了如下代码

 

#include <iostream>
#include <string>
using namespace std;

class Cat{
public:
	Cat():name("cat"){}
	//Cat( const Cat& argCat){name=argCat.getName();} //此句子错误
	Cat(const Cat& argCat);//类内部,可以访问私有变量
	string getName()
	{
		return name;
	}
private:
	string name;
};

//Cat  Cat::(const Cat& argCat){name=argCat.name;} 外部不可访问
void main()
{
	Cat a;
	Cat b(a);
	cout << b.getName() <<endl;
}


(1)个问题为什么这个事错误的呢?传入构造函数的实参是Cat类型的const引用。该引用时const类型,所以在调用函数时候,必须调用const类型的函数。如果

 string getName()
	{
		return name;
	}


改为 const函数,可运行成功

string getName() const
	{
		return name;
	}


(2)为什么第二个是正确的呢?Cat(const Cat& argCat){name=argCat.name;} 
按道理分析Cat b(a);  传入a的引用。如果调用private成员,只能通过接口,但是argCat.name 没有通过接口,直接用对象调用的。
查了一下  :在类的内部,任何对象都是该类的友元对象。这样的话,就好理解了。 

 

延伸: const函数能不能调用非const函数,能不能使用非const成员。

 

#include <iostream>
#include <string>
using namespace std;

class Cat{
public:
	void hello()const;
	void Cat::pri() ;
};

void Cat::hello()const
{
	cout << "hello" <<endl;
	pri();  //编译失败 调用的是非const的函数pri 。如果把pri声明定义成const类型则程序运行成功
}
void Cat::pri() 
{
	cout << "ok" <<endl;
}

void main()
{
	Cat a;
	a.hello();


}


仅仅限于函数。const函数可以调用const成员变量,也可以调用非const变量。 只是自己的小总结,如有错误,请指出。谢谢你们。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值