C++基础知识,运算符重载

h:
#ifndef TESTCLASS__H
#define TESTCLASS__H

class testClass
{
public:
int a;
int b;
int c;
char* p;
//无参构造函数
testClass();
//运算符重载
testClass& operator=(const testClass&);
//构造函数
testClass(int, int, int);
//析构函数
~testClass();
};

#endif // !TESTCLASS__H

cpp:
#include
#include “testClass.h”
testClass& testClass::operator=(const testClass& sourceObj)
{
this->a = sourceObj.a;
this->b = sourceObj.b;
this->c = sourceObj.c;
std::cout << “调用了赋值运算符重载” << std::endl;
return *this;
}

testClass::~testClass()
{
delete[] p;
std::cout << “调用了析构函数” << std::endl;
}

testClass::testClass(int a, int b, int c) :a(a), b(b), c©
{

}

testClass::testClass()
{
char* p = new char[100];
}

mian
:
#include
#include “testClass.h”
using namespace std;

int main()
{
testClass classA(1, 2, 3);
testClass classB{ 4,5,6 };
//报错,两个对象不能这样比较,需要重载运算符“==”
//if (classA == classB){}
//重载运算符本质上是一个"成员函数",是属于对象的,而非类的。这个函数的正式名字:operator关键字 接运算符
//既然本质上是一个函数,那么就有参数列表和返回参数
//有一些运算符,系统默认会生成一个运算符的重载,比如赋值运算符“=”
testClass classC = classA;//这是定义的时候初始化,不是赋值
testClass classD = { 7,8,9 };
classD = classC;

//2、拷贝赋值运算符
//testClass& operator=(const testClass&);
// 这个参数就是运算符右边的对象,给一个const是为了避免修改了右边的对象
//testClass& testClass::operator=(const testClass&)
//{
// std::cout << “调用了赋值运算符重载” << std::endl;
// return *this;
//}

//3、析构函数,~className,没有有参数,没有返回值,不能重载 (就是java里面的多态)
//析构函数干了两个事情,我们的写的函数体部分,函数体执行完之后系统进行销毁
//成员变量的初始化和销毁的时机
//初始化顺序:声明的顺序,先定义的变量先有值
//销毁顺序:先定义的后销毁
//应该是个栈,先进后出,就是个栈
//但是如果是自己声明的内存,如这个char* p = new char[100],就要显示delete[] p;

//new/delete对象,new的对象一定要自己释放
testClass* class1 = new testClass;//调用无参构造函数
testClass* class2 = new testClass();//调用无参构造函数
delete class1;//必须自己delete,然后程序才会调用析构函数,这是放到了堆里面
delete class2;

}

发布了157 篇原创文章 · 获赞 167 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_40666620/article/details/102883382
今日推荐