C++ 快速回顾(三)

发布于:2025-06-28 ⋅ 阅读:(17) ⋅ 点赞:(0)


前言

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

三、其它运算符重载

可以重载的运算符

在这里插入图片描述

不可重载的运算符

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到