2011-11-23 48 views
3

我是C++的新手,并试图找出指针和引用之间的区别。我刚刚读了this short summaryC++运算符重载将指针类型作为参数?

在文章中,作者提到day *operator++ (day *d);不会编译(注:day是枚举类型),并认为此重载操作者功能的参数的类型必须是T,T &,或T const的&,其中T是一个类或枚举类型。

我假设指针是内置类型而不是类或枚举,所以它不能用于重载操作符,并且操作符重载不可能适用于所有内置类型,如int和double。

例如,int i = 1; ++i;将永远不会导致i为3,因为++运算符负载类型为int

我正确吗?请帮助我更好地理解此问题。在操作符重载

+1

我看了一下你的问题中的链接--- *可怕*(你可以从他们的例子甚至没有编译的事实中已经知道)。引用的最常见用法是:当复制对象时,1个const引用作为函数参数会效率低下(并且可能由于缺少复制构造函数而被禁用); 2许多非const成员函数(包括运算符)的返回类型; 3一个非const引用作为函数参数,当对象被修改时(这个用法是有争议的,因为指针也很受欢迎); 4作为数据成员,永远不能改变(而不是指针)。 – Walter

回答

5

第一条规则是:
不能为内置的数据类型,您可以只为您的自定义数据类型,所以你在这方面的正确的重载运算符。

4

是的,指针是原始类型而不是对象。它们只是数字(它们指向的对象的内存地址),并且可以将这些算术应用于它们。

是的,你不能为原始类型重载操作符(然而,你可以在一个带有原始类型参数的类中重载二元操作符)。

+0

您能否分享一个例子,您想在一个带有原始类型参数的类中重载二元运算符? –

+0

@TerryLiYifeng,其中一个例子是一个'Complex'类'operator +',它带有'double'参数。 –

+0

是的,对于带原始值的字符串连接也是必要的(仍然是'operator +')。 我曾经创建过一个Matrix类,该类有一个用于标量乘的'operator *'重载。 – Viruzzo