C++ 重载
意义:通过重载各种运算符,将其原来无法访问的protected和private类型的变量,不再通过结构体或其他方法改变他的值,提高效率。
方法:operator 运算符
1、运算符重载
#include<iostream>
#include<string>
using namespace std;
class Node
{
private:
int m_x;
public:
Node(){}
Node(int x) :m_x(x) {} //m_x初始化
Node operator +(const Node &node)
{
Node c;
c.m_x = this->m_x + node.m_x;
cout << this->m_x << endl;//this 是 a
cout << node.m_x << endl;//node 是 b
return c;
}
void show()
{
cout << this->m_x << endl;
}
};
int main()
{
Node a(1);
Node b(2);
Node c = a + b;
c.show();
return 0;
}
加减乘除 同理
2、左移 、右移运算符重载
左移:<<
右移:>>
#include<iostream>
#include<string>
using namespace std;
class Node
{
private:
int m_x;
public:
Node(){}
Node(int x) :m_x(x) {} //m_x初始化
friend ostream &operator <<(ostream &cout,const Node &node)
{
cout << node.m_x << endl;
return cout;//cout为ostream类型
}
};
int main()
{
Node a(1);
cout << a << endl;
return 0;
}
friend将ostream与Node两个参数联合起来
onstream &引用这个特定位置的cout、以及返回这个cout,是为了确认调用的是这个cout、而不是泛指的所有的cout。 否者的话、系统会把他当作局部变量运行完后直接给释放了。
右移同理
3、自增++运算符重载
++在后 先执行其他语句,在++
++在前 先++,在执行其他语句
#include<iostream>
#include<string>
using namespace std;
class Node
{
public:
Node() {}
Node(int x) :num(x){}
//重载<<运算符
friend ostream &operator <<(ostream &cout, const Node &node)
{
cout << node.num << endl;
return cout;//cout为ostream类型
}
//++在前
Node operator++( )//后缀“operate++”的额外参数必须是“int”类型
{
++this->num;
return *this;
}
//++在后
Node operator++(int)
{
Node a=*this;//申请一个局部类 记录其当前的值
this->num++;//当前的值++后
return a;//返回原来的值 但他也++过了 以实现后++的功能
}
private:
int num;
};
int main()
{
Node node(1);
cout << node++ << endl;// 1
cout << ++node << endl;// 3
return 0;
}
4、[ ]数组的重载
arr[ ] arr 类名
#include<iostream>
#include<string>
using namespace std;
class Node
{
public:
Node() {}
Node get(int a)//get数组下标
{
this->length = a;
this->space =(int *) malloc(sizeof(int)*a);
return *this;
}
Node arr(int a,int num)
{
this->space[a] = num;
return *this;
}
void show()
{
for (int i = 0; i < length; i++)
{
cout << this->space[i] << endl;
}
}
int &operator[](int a)
{
return this->space[a];//返回的是地址
}
private:
int length;
int *space;
};
int main()
{
Node node;
node.get(5);
for (int i = 0; i < 5; i++)
{
node[i] = i;//node.arr(i,i);
}
node.show();
return 0;
}
5、智能指针重载
6、 ||和&&不建议重载
7、函数调用运算符重载
|