为什么c++中类的成员函数参数有时候是类的引用而有时候是类名??求教!!感谢
展开全部
引用是什么?引用就是对象的另一个名字。通过使用引用形参,函数可以直接访问实参对象,而无须赋值它。
来看一个简单的例子。
Class A;
void A::copy(const A& a); 那么这里就a就是传递给a实参(假设为b)的别名。调用形式如aa.copy(b)。而如果copy函数声明为void A::copy(A a),程序需要在copy函数执行的时候重新构造一个临时对象a(使用A的复制构造函数)。这样会带来效率和空间上的损失。如果A这个类禁止了复制构造函数的使用 ,那么该调用会是错误的。
再来看看引用带来的其它好处:
1. 使用引用形参可以返回额外信息。 函数只能有一个返回值,那么需要返回多个内容的时候怎么办?可以使用引用形参来传递变量进行修改从而达成我们的目的。
2. 利用const引用避免复制。来看一个简单的例子:
bool isShorter(const string &s1, const string &s2) { return s1.size() < s2.size(); }
因为在程序中不需要修改实参的值,所以加上const可以避免复制,在函数体内任意对s1,s2进行修改的操作都是违法的。这样使用可以保证我们无意的修改实参,而这并非我们的本意。
3. 应该讲不需要修改的引用形参定义为const引用。普通的非const引用形参在使用时不太灵活。这样的形参既不能用const对象初始化,也不能使用字面值或产生右值的表达式实参初始化。
说了这么多,如有错误,请指出。希望能学好引用,写出效率更高更通用的代码。
来看一个简单的例子。
Class A;
void A::copy(const A& a); 那么这里就a就是传递给a实参(假设为b)的别名。调用形式如aa.copy(b)。而如果copy函数声明为void A::copy(A a),程序需要在copy函数执行的时候重新构造一个临时对象a(使用A的复制构造函数)。这样会带来效率和空间上的损失。如果A这个类禁止了复制构造函数的使用 ,那么该调用会是错误的。
再来看看引用带来的其它好处:
1. 使用引用形参可以返回额外信息。 函数只能有一个返回值,那么需要返回多个内容的时候怎么办?可以使用引用形参来传递变量进行修改从而达成我们的目的。
2. 利用const引用避免复制。来看一个简单的例子:
bool isShorter(const string &s1, const string &s2) { return s1.size() < s2.size(); }
因为在程序中不需要修改实参的值,所以加上const可以避免复制,在函数体内任意对s1,s2进行修改的操作都是违法的。这样使用可以保证我们无意的修改实参,而这并非我们的本意。
3. 应该讲不需要修改的引用形参定义为const引用。普通的非const引用形参在使用时不太灵活。这样的形参既不能用const对象初始化,也不能使用字面值或产生右值的表达式实参初始化。
说了这么多,如有错误,请指出。希望能学好引用,写出效率更高更通用的代码。
展开全部
类名应该是类的一个副本,你在成员函数中改变它不会改变被引用的对象,而类的引用则会改变原来被引用的对象。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
亲,你能把问题说清楚点吗?洒家看不懂额!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看你函数的功能了 有时候用引用有时候用类名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把问题说的详细一点啊。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询