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

class A{
private:
double a;
public:
A operator=(const double t);
};
括号里的const double t 为什么是正确的?

const double t是你自己定义的,没问题。表明t在函数内不被修改。
如果要写拷贝构造函数,那么必须使用引用,
A(const A & a)因为传参的过程就是调用拷贝构造的过程,而拷贝构造就是要定义的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-05
用&表示是一个引用,其实就是相当于指针,如果传的是引用,那么在这个方法对这个变量做的任何修改对调用这个函数的代码都是可见的,而const是指定这个变量在这个方法中不可修改,如果两者一起用,就是表示这个变量是个引用,且在函数中不可修改~~
第2个回答  2012-07-05
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=.
第3个回答  2012-07-05
const表示double t是只读属性,不允许修改。
当然没问题啦。如果你在方法实现中对t值有改动,程序就报错了。
第4个回答  2012-07-05
const修饰只读变量t,表明t是不允许更改的,提高了程序的健壮性。
不过可以通过指针间接修改t所占内存的值。

C++ 运算符的重载问题:什么时候operator()括号里面需要用&和const?不...
const double t是你自己定义的,没问题。表明t在函数内不被修改。如果要写拷贝构造函数,那么必须使用引用,A(const A & a)因为传参的过程就是调用拷贝构造的过程,而拷贝构造就是要定义的。

C++重载运算符时为什么有时候需要用&,请举个形象点的例子
因此,返回一个流对象引用是惟一选择。这个唯一选择很关键,它说明了引用的重要性以及无可替代性,也许这就是C++语言中引入引用这个概念的原因吧。 赋值操作符=。这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续...

你能给我讲解一下c++的下标运算符重载和函数调用运算符重载吗?我看了...
const 类型 & operator [ ] (整型变量) const; \/\/ 这是用于右值 重载原则:1. 重载的下标运算符一定是非静态成员函数 2. 函数参数一定是一个整型变量 3. 左操作数一定是this,也就是本对象 函数运算符( )的重载 使用场合:C++ 中通过重载运算符( ),可以在如同对象初始化一样,直接在对象名...

求助,关于一道C++函数重载的问题
你有这样的问题大概是因为双目操作符比如*,可以有x.operator*(y)这种写法吧? 但是这个不改变*是二目操作符的事实。C++规定:双目操作符重载作为成员函数时只能有一个形参,调用方为左操作数,形参为右操作数。所以x.operator*(y)等价于x*y。2、重载的是后置++。后置++重载作为成员函数时跟你...

C++运算符重载,+-*\/的重载,返回值为什么是对象而不是对象的引用?而流操...
+,-,*等返回不了引用,比如+运算符,可以如下重载(为了简单,假设A 只有int x;int y)A operator+(A a,A b) {A sum; sum.x=a.x+b.x; sum.y=a.y+b.y; return sum; } 分析不能用引用的原因: 函数传入了两个参数a,b,并且+只能传入两个参数(c++不允许自己创造运算符...

C++中为什么重载前置++运算符要加个&?
举个例:cout<<是经常用的,其实是重载了<<这个操作符。如果不返回引用,cout<<a<<b<<endl; 就不可以一起写了。如果返回自身的引用 cout<

c++中运算符(\\" << \\")重载ostream&是什么意思
再如,对于->重载必须返回指针类型不可变!即,即使进行运算符重载,也只是有限自由!friend ostream & operator << (ostream &os, const CPolynomial&)operator是进行运算符重载的关键词,它后面就是重载的运算符,左侧是流,右侧是流处理的对象。这样你就可以处理如何输入或输出该对象 ...

求助:c++C++ 运算符重载 的参数问题
&表示引用传递,相信你已经知道 const则表示传进来的参数不能被修改,由于这里是引用传递,参数修改后外面的值也会被修改,而这里只是重载+运算,并不希望参数被修改,所以为了安全,一般会定义成const类型

C++中,operator<重载为何可以写在类外面,而在类里为何要加friend?
bool operator<(const Person& a,const Person& b);};bool operator<(const Person& a,const Person& b){...}\/\/作为普通函数重载(不推荐)class Person{public:\/\/注意,重载运算符为普通函数时,使用到的类成员必须为publicstring name;int age;public:Person(const char* name, int age):...

C++重载运算符。 太TM难了。 进来看看
friend ostream& operator<<(ostream& os,const Date t)这是一个函数头,也就是说他是一个函数,这个函数的名称是operator <<,你要记住的是重载操作符运算符函数,是叫函数,他和普通函数一模一样,但有一些限制,使用方法可以和普通函数一样(当然还有他的特殊用法)。就拿这个题来说,假设重载的<...

相似回答