我来自C++,并使用C#作为新手,只是尝试了一下:
class Class1
{
int mI = 0;
string mS = "ab";
public static Class1 operator + (Class1 obj1, Class1 obj2)
{
return new Class1()
{
mI = obj1.mI + obj2.mI,
mS = obj1.mS + obj2.mS
};
}
public stati
我是C++的新手,我刚刚学到了重载操作符。我很困惑,因为我似乎可以将一个对象分配给另一个对象,而不必重载"=“操作符。以下面的代码为例:
class process
{
int size;
public:
process(int s)
{
size = s;
}
~process();
int getSize()
{
return size;
}
};
int main()
{
process p1(2);
process p2(3);
p1 = p2;
std::cout << p1.getS
我是C++的新手,现在我正在尝试实现一个模型。那么,为类的每个成员重载赋值操作符(作为setter)是否有意义?如果非成员函数试图为私有/受保护的数据成员设置新值,这将非常重要。例如:
class Human {
private:
double aWeight[100]; /* let's say I want to keep...
...a set of 100 weight measures of this human.*/
// member functions and constructors here...
};
现在,假设我有一个非会员
通常,标准函数由functionName(list of arguments)调用。另一种调用对象函数的标准方法是object.functionName(list of arguments)。这两种方法都很清楚,而且易于理解,因为函数签名是按精确顺序调用的。
然而,当涉及到以下方面时:
A一元操作符重载:例如,classA::operator-()不带任何参数。因此,当我们编写object2 = -object1时,假设object2和object1都是classA的实例,C++如何知道它必须调用classA::operator-(),因为我们没有编写定义两个对象(例如Complex oper
标题基本上说明了一切。我主要想这样做,这样我就可以创建一个可以在其他API中初始化其他函数的参数的对象(比如自定义字符串对象)。下面是我尝试让一个自定义整数类工作的示例:
#include <iostream>
using namespace std;
class test
{
public:
int member;
test(int i) : member(i) {}
friend int &operator=(int &i, test t);
};
int &operator=(int &i, test t)
{
C++只允许重载=运算符作为成员函数,而不是全局函数。
Bruce Eckel说if it was possible to define operator= globally, then you might attempt to redefine the built-in = sign.,由于这个原因,你只能重载=运算符作为成员函数。
如果C++已经定义了=运算符,那么为什么还要定义+、-等其他运算符呢?不是由C++定义的,因为它们可以作为非成员函数重载。?