C++ 运算符的重载问题:什么时候operator()括号里面需要用&和const?不懂运算符重载。。求解答!谢谢
classA{private:doublea;public:Aoperator=(constdoublet);};括号里的constdoublet为什么是正确的?...
class A{
private:
double a;
public:
A operator=(const double t);
};
括号里的const double t 为什么是正确的? 展开
private:
double a;
public:
A operator=(const double t);
};
括号里的const double t 为什么是正确的? 展开
5个回答
展开全部
用&表示是一个引用,其实就是相当于指针,如果传的是引用,那么在这个方法对这个变量做的任何修改对调用这个函数的代码都是可见的,而const是指定这个变量在这个方法中不可修改,如果两者一起用,就是表示这个变量是个引用,且在函数中不可修改~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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=.
在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=.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
const表示double t是只读属性,不允许修改。
当然没问题啦。如果你在方法实现中对t值有改动,程序就报错了。
当然没问题啦。如果你在方法实现中对t值有改动,程序就报错了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
const修饰只读变量t,表明t是不允许更改的,提高了程序的健壮性。
不过可以通过指针间接修改t所占内存的值。
不过可以通过指针间接修改t所占内存的值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询