运算符-重载为成员函数 和友元函数的区别.
来源:互联网 发布:蓝格美容院软件 编辑:程序博客网 时间:2024/05/21 22:44
下面的代码有无错误? 为什么?
- class A
- {
- public:
- A(){x=0;}
- A(int _x):x(_x){}
- //friend A operator + (const A& a1, const A& a2 )
- //{
- // return A(a1.x + a2.x);
- //}
- A operator + (const A &a1)
- {
- return A(x + a1.x);
- }
- int x;
- };
- using namespace std;
- void testA( const A& a1, const A& a2)
- {
- A a3 = a1 + a2;
- }
答案是:
上面的代码编译不过去.
因为: testA的传进的两个参数有const修饰, 所以 A a3 = a1 + a2; 将尝试调用 A operate + (const A& a1, const A& a2 ). 注意, 第一个参数a1有const修饰.
而 A类内部重载的 operate + (const A &a1) 底层上表现为 A operate + ( A & a1, const A& a2 ). 注意, 第一个参数, 没有const修饰.
所以编译不过去.
通过 恢复 被注释掉的代码. 才可以编译过去.
如果同时定义
内部成员函数 A operate + ( A & a1, A& a2 ).
外部友元函数 friend operate + ( A & a1, A& a2 ). 编译时, 将报错, 函数模糊. 因为两者底层上是一样的! 没法实现函数重载
重载规则:
一般情况下: 单目算符重载为成员函数, 双目算符重载为友元. 而且重载其一即可.
若有 双目算符, 函数内部要修改成员变量啥的, 可以重载为成员函数.
- 运算符-重载为成员函数 和友元函数的区别.
- 运算符-重载为成员函数 和友元函数的区别.
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 成员函数重载运算符和友元函数重载运算符的比较
- 重载运算符之友元函数和成员函数
- 运算符重载函数作为类成员函数与友元函数的区别
- C++ 友元函数和非成员运算符重载
- 运算符重载为友元函数
- 十七、运算符重载(一) 成员函数重载、友元函数重载、运算符重载规则
- 关于运算符重载 成员函数运算符重载 友元函数运算符重载
- C++运算符重载 成员函数与友元函数
- 运算符重载 成员函数及友元函数
- 运算符重载函数作为类成员函数和友元函数
- 运算符重载函数作为类成员函数和友元函数
- C++运算符重载函数作为类成员函数和友元函数
- Kindle 3 连接TP-LINK WR340G 的方法
- NOI 2010
- C#委托用法
- 纹理加载时,出现报错是:pixel format with necessary capabilities not found时
- 在ANDROID中使用自定义字体
- 运算符-重载为成员函数 和友元函数的区别.
- 关于ping带源地址和不带源地址有什么区别呢
- ZOJ 1649 Rescue (BFS)
- git、repo、gerrit之间的关系--学习感受第一篇
- Android开发之搜索框应用(一)
- C++重载操作符的简单实例
- 一个企业真有所谓的基因吗?
- 2011-8-1 21:40:28
- CVS使用手册