C++ 运算符的重载问题:什么时候operator()括号里面需要用&和const?不懂运算符重载。。求解答!谢谢

classA{private:doublea;public:Aoperator=(constdoublet);};括号里的constdoublet为什么是正确的?... class A{
private:
double a;
public:
A operator=(const double t);
};
括号里的const double t 为什么是正确的?
展开
 我来答
兔子和小强
2012-07-05 · TA获得超过6946个赞
知道大有可为答主
回答量:3332
采纳率:74%
帮助的人:1381万
展开全部
const double t是你自己定义的,没问题。表明t在函数内不被修改。
如果要写拷贝构造函数,那么必须使用引用,
A(const A & a)因为传参的过程就是调用拷贝构造的过程,而拷贝构造就是要定义的。
zhouhaibing089
2012-07-05 · TA获得超过331个赞
知道答主
回答量:80
采纳率:0%
帮助的人:95万
展开全部
用&表示是一个引用,其实就是相当于指针,如果传的是引用,那么在这个方法对这个变量做的任何修改对调用这个函数的代码都是可见的,而const是指定这个变量在这个方法中不可修改,如果两者一起用,就是表示这个变量是个引用,且在函数中不可修改~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
廖北伯
2012-07-05 · TA获得超过526个赞
知道小有建树答主
回答量:375
采纳率:66%
帮助的人:287万
展开全部
Note1:

在C++, 各个参数都有三种传法可以选择:
(1) by value: 如 f(T x, ...), x的内容被复制.caller原先x的内容不可能被f更动.
(2) by reference: 如 f(T& x, ...), 传的是x的adress, caller原先x的内容希望被f更动.
(3) by constant reference: 如 f(const T& x), 传的是x的adress,caller原先x的内容不允许被f更动.
另有来自於C的低阶(low-level)语法.

(4) 如 f(T* px, ...) 这是(2)的内部格式

(5) 如 f(const T* px, ...) 这是(3)的内部格式

写码时的选择规则如下:
若caller原先x的内容必须请 f 设置, 就用(2),

若caller原先x的内容不想变动, 就用(1)或(3). 若T的size小可用(1), size大就用(3). size大小是sizeof(T)与指针的大小相比来判定.
Note2:

特别注意: 使用(1)时会自动引发 copy-constructor.

所以copy-constructor必须写成 T::T(const T& s), 若写成 T::T(T s) 就会造成无穷调用.
Note3:

operator= 的写法是 void operator=(const T& s) 或 const& operator=(const T& s)
对於 A a, b; a=b; 被转成 a.oprator=(b)

本题漏写了 operator(const A& s). 於是就会使用内建的版本: 直接复制各个data member.
这在本题能正常运作, 但若class中含有指针并外接其它数据, 就会发生错误.

Note4:

本题的operator=是一个额外的overloading, 负责处理像这种用法 a=7.1; 这被转成 a.operator(7).
对於 A a, b; 写 a=b; 根本不会调用到本题的operator=.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
soar503
2012-07-05
知道答主
回答量:9
采纳率:0%
帮助的人:7万
展开全部
const表示double t是只读属性,不允许修改。
当然没问题啦。如果你在方法实现中对t值有改动,程序就报错了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Andrewjackey
2012-07-05
知道答主
回答量:4
采纳率:0%
帮助的人:6274
展开全部
const修饰只读变量t,表明t是不允许更改的,提高了程序的健壮性。
不过可以通过指针间接修改t所占内存的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式