【发布时间】:2016-01-09 18:19:06
【问题描述】:
我需要使用运算符重载添加多个对象,如下所示:
ex1 operator+(const ex1 &c1, const ex1 &c2, more++){
return ex1(c1 + c2 + more++);
}
这个函数添加了两个对象,但是我想添加多个对象。这可能吗?
int main(){
// first for example I want to add 3 objects
ex1 ob1, ob2, ob3;
ob1 + ob2 + ob3;
code..
code..
// and after that I want to add for example 10 or more objects
ex1 ob1, ob2, ob3,..., ob10;
ob1 + ob2 + ob3 +....+ ob10;
}
【问题讨论】:
-
不管你想把多少个“值”(或对象)加在一起,操作符函数仍然只需要一个(对于成员函数)或两个(对于非成员函数)参数.编译器将为您级联调用。
-
你能解释一下你的回复吗?你说我可以用任意数量的参数调用operator+?
-
否,编译器将生成正确数量的运算符函数调用。该函数将始终只使用一个或两个参数调用(取决于它的声明位置),但调用次数会随着您添加更多值而增加。
-
只是为了实验,你为什么不写一个简单的
operator+函数,它只打印一些东西并返回一个默认构造的对象,当然只有两个参数才能使它工作。这样您就可以很容易地看到该函数被调用了两次,例如a + b + c,a + b + c + d等三遍 -
另外,想一想:加法(
+运算符)是一个 二元 运算符,这意味着它有 两个 操作数:一个左手边和一个右手边。这就是加法的工作原理,无论是在 C++ 中还是在现实生活中。左边是另一个加法的结果并不重要,运算符仍然只有两个操作数。
标签: c++ class overloading operator-keyword