C++ 快速回顾(三)
C++ 快速回顾(三)
- 前言
- 一、重载左移操作符
- 二、重载等号运算符的深拷贝
- 三、其它运算符重载
- 可以重载的运算符
- 不可重载的运算符
前言
用于快速回顾之前遗漏或者补充C++知识
一、重载左移操作符
让我们来实现一下类似如下的打印输出
std::cout << "Hello World!\n";
本质就是重载了 “<<” 左移操作符
namespace Test
{class MyStream{public:MyStream& operator<<(const char* p){printf(p);return *this;}void operator<<(const MyStream& Stream){printf("\r\n");}MyStream& operator<<(const int Value){printf("%d", Value);return *this;}};MyStream printCout;MyStream printEnd;
}int main()
{Test::printCout << "Hello" << " " << "C++" << Test::printEnd;Test::printCout << "Test" << " " << 100 << Test::printEnd;system("pause");return 0;
}
二、重载等号运算符的深拷贝
结合我们之前的拷贝构造知识,对赋值等号进行重载
class MyClass
{public:MyClass(int A,const char* Value){this->a = A;this->Ptr = (char*)malloc(1024);memset(this->Ptr, 0, 1024);strcpy(Ptr, Value);}~MyClass(){if (this->Ptr){free(this->Ptr);this->Ptr = nullptr;}}MyClass& operator=(const MyClass& Value){printf("operator=\r\n");this->a = Value.a;this->Ptr = (char*)malloc(1024);memset(this->Ptr, 0, 1024);strcpy(Ptr, Value.Ptr);return *this;}void Print() {if (this->Ptr){printf(this->Ptr);printf("\r\n");}}int a = 0;char* Ptr;
};int main()
{{MyClass A(100, "Hello World");A.Print();MyClass B(200,"eeeee");B = A;B.Print();}system("pause");return 0;
}
注意:B = A;这样是调用重载赋值运算符,而MyClass B = A; 这样是调用拷贝构造!!
注意:B = A;这样是调用重载赋值运算符,而MyClass B = A; 这样是调用拷贝构造!!
注意:B = A;这样是调用重载赋值运算符,而MyClass B = A; 这样是调用拷贝构造!!