前言
用于快速回顾之前遗漏或者补充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; 这样是调用拷贝构造!!