2.运算符重载的限制
1.重载后的运算符的两个操作数中,至少有一个是用户自定义的类型;
2.使用运算符时不能违反运算符原来的句法规则。例如,不能将求模运算符(%)重载成使用一个操作数;不能修改运算符的优先级。
3.不能创建新运算符,只能对存在的运算符进行重载。
5.大多数运算符都可以通过成员或非成员函数进行重载,但下面的运算符只能通过成员函数进行重载。=:赋值运算符。():函数调用运算符。[]:下标运算符。->:通过指针访问类成员的运算符。
大多数运算符都可以通过成员或非成员函数进行重载
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> class NUM { public: int num; //private: // int num; public: NUM(); NUM(int m); void show() const; NUM operator+(const NUM& n) const;//通过成员函数重载加法运算符 }; NUM::NUM() { num = 0; } NUM::NUM(int m) { num = m; } void NUM::show() const { std::cout << "num = " << num << std::endl; } //通过成员函数重载加法运算符 NUM NUM::operator+(const NUM& n) const { NUM temp; temp.num = num + n.num; return temp; } //通过非成员函数重载减法运算符 NUM operator-(const NUM &m, const NUM &n) { NUM temp; temp.num = m.num - n.num; return temp; } int main() { std::cout << "Hello World!\n"; NUM t1(1); t1.show(); NUM t2(2); t2.show(); NUM t3; t3 = t1 + t2; t3.show(); t3 = t1 - t2; t3.show(); } // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单 // 调试程序: F5 或调试 >“开始调试”菜单 // 入门使用技巧: // 1. 使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4. 使用错误列表窗口查看错误 // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件 只能通过成员函数进行重载。
#include <iostream> using namespace std; class Num { private: int n; public: Num(); Num(int m); void operator=(int l); }; Num::Num() { n = 0; cout << "Hello world" << endl; } Num::Num(int m) { n = m; cout << "Good morning" << endl; } void Num::operator=(int l) { n = l; cout << "I love you, Rick" << endl; } int main(void) { Num a; a = 10; // a(10) return 0; }