我正在尝试更仔细地理解C++中的运算符。
我知道C++中的运算符基本上就是函数。我不明白的是,这个函数是什么样子的?
举个例子:
int x = 1;
int y = 2;
int z = x + y;
最后一行如何翻译?是不是:
int z = operator+(x,y);
或
int z = x.operator+(y);
当我同时尝试这两种方法时,编译器出现错误。我调用它们是错误的,还是不允许直接调用C++中的运算符?
我来自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++只允许重载=运算符作为成员函数,而不是全局函数。
Bruce Eckel说if it was possible to define operator= globally, then you might attempt to redefine the built-in = sign.,由于这个原因,你只能重载=运算符作为成员函数。
如果C++已经定义了=运算符,那么为什么还要定义+、-等其他运算符呢?不是由C++定义的,因为它们可以作为非成员函数重载。?
在C++引物第5版。斯坦利·利普曼在第15章OOP中说:
std::multiset<std::shared_ptr,解密(比较)*>项{*>};
我们的多集合中的元素是shared_ptrs,并且shared_ptr的运算符不少于操作符。因此,我们必须提供自己的比较操作来排序元素(第11.2.2节,第425页)。在这里,我们定义了一个名为compare的私有静态成员,它比较shared_ptrs指向的对象的isbns。我们通过类内初始化器初始化多集以使用此比较函数(§7.3.1,第274页):“
但如果我尝试这个:
// a class that doesn't
这个问题听起来可能有点奇怪,但我从来没有完全理解为什么我们需要有两种不同的语法来删除C++中的动态分配内存?
例如,
int *p = new int[10];
delete[] p; // why not just delete p;?
在普通的老C中,您只需使用free函数来释放分配给指针的内存,而不管分配的元素数量如何。当然,C++要复杂一些,因为它允许类类型调用它们的析构函数等等。但是,我认为使用单一语法删除C++中动态分配的内存没有任何障碍。
有什么根本原因决定使用两个版本,delete和delete[]?
更重要的是,如果您使用delete而不是delete[],大多数编译器甚至都
我是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...
};
现在,假设我有一个非会员