C++ 容许在同一回到值中的某一表达式和操作符选定数个表述,依次称作表达式空载和操作符空载。
空载新闻稿是指两个与以后早已在该回到值内新闻稿过的表达式或方式具备相撞中文名称的新闻稿,但它的模块条目和表述(同时实现)不完全相同。
当您初始化两个空载表达式或空载操作符时,C++透过把您所采用的模块类别与表述中的模块类别展开较为,决定换用合适的表述。优先选择合适的空载表达式或空载操作符的操作过程,称作空载重大决策。
C++ 中的表达式空载
在同两个回到值内,能新闻稿两个机能类似于的撞名表达式,但那些撞名表达式的形式模块(指模块的特征值、类别或是次序)要完全相同。您无法仅透过回到类别的完全相同来空载表达式。
上面的示例中,撞名表达式 print() 被用作输入完全相同的数据类别:
示例
#include
using namespace std;
class printData
{
public:
void print(int i) {
cout << “整数为: ” << i << endl;
}
void print(double f) {
cout << “浮点数为: ” << f << endl;
}
void print(char c[]) {
cout << “字符串为: ” << c << endl;
}
};
int main(void)
{
printData pd;
// 输入整数
pd.print(5);
// 输入浮点数
pd.print(500.263);
// 输入字符串
char c[] = “Hello C++”;
pd.print(c);
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
整数为: 5
浮点数为: 500.263
字符串为: Hello C++
C++ 中的操作符空载
您能重表述或空载大部分 C++ 内置的操作符。这样,您就能采用自表述类别的运算符。
空载的操作符是带有特殊中文名称的表达式,表达式名是由关键字 operator 和其后要空载的操作符符号构成的。与其他表达式一样,空载操作符有两个回到类别和两个模块条目。
Box operator+(const Box&);
新闻稿加法操作符用作把两个 Box 对象相加,回到最终的 Box 对象。大多数的空载操作符可被表述为普通的非成员表达式或是被表述为类成员表达式。如果我们表述上面的表达式为类的非成员表达式,那么我们需要为每次操作传递两个模块,如下所示:
Box operator+(const Box&, const Box&);
上面的示例采用成员表达式演示了操作符空载的概念。在这里,对象作为模块展开传递,对象的属性采用 this 操作符展开访问,如下所示:
示例
#include
using namespace std;
class Box
{
public:
double getVolume(void)
{
return length * breadth * height;
}
void setLength( double len )
{
length = len;
}
void setBreadth( double bre )
{
breadth = bre;
}
void setHeight( double hei )
{
height = hei;
}
// 空载 + 操作符,用作把两个 Box 对象相加
Box operator+(const Box& b)
{
Box box;
box.length = this->length + b.length;
box.breadth = this->breadth + b.breadth;
box.height = this->height + b.height;
return box;
}
private:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};
// 程序的主表达式
int main( )
{
Box Box1; // 新闻稿 Box1,类别为 Box
Box Box2; // 新闻稿 Box2,类别为 Box
Box Box3; // 新闻稿 Box3,类别为 Box
double volume = 0.0; // 把体积存储在该变量中
// Box1 详述
Box1.setLength(6.0);
Box1.setBreadth(7.0);
Box1.setHeight(5.0);
// Box2 详述
Box2.setLength(12.0);
Box2.setBreadth(13.0);
Box2.setHeight(10.0);
// Box1 的体积
volume = Box1.getVolume();
cout << “Volume of Box1 : ” << volume <
// Box2 的体积
volume = Box2.getVolume();
cout << “Volume of Box2 : ” << volume <
// 把两个对象相加,得到 Box3
Box3 = Box1 + Box2;
// Box3 的体积
volume = Box3.getVolume();
cout << “Volume of Box3 : ” << volume <
return 0;
}
当上面的代码被编译和执行时,它会产生下列结果:
Volume of Box1 : 210
Volume of Box2 : 1560
Volume of Box3 : 5400
可空载操作符/不可空载操作符
上面是可空载的操作符条目:
上面是不可空载的操作符条目:
• .:成员访问操作符
• .*, ->*:成员指针访问操作符
• :::域操作符
• sizeof:长度操作符
• ?::条件操作符
• #: 预处理符号