C/C++编程笔记:盘点那些不能重载的运算符!你记住了吗?
Posted 一起学编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++编程笔记:盘点那些不能重载的运算符!你记住了吗?相关的知识,希望对你有一定的参考价值。
示例1:重载++运算符:
// CPP program to illustrate
// operators that can be overloaded
#include <iostream>
using namespace std;
class overload {
private:
int count;
public:
overload()
: count(4)
{
}
void operator++()
{
count = count + 1;
}
void Display()
{
cout << "Count: " << count;
}
};
int main()
{
overload i;
// this calls "function void operator ++()" function
++i;
i.Display();
return 0;
}
输出:
Count:5
当++运算符对重载类的对象(在这种情况下为对象i)进行操作时,将调用此函数。在程序中,定义了void operator ++()运算符功能(在重载类内部)。对于i对象,此函数将count的值增加1。
示例2:重载++运算符和重载postincrement运算符:
#include <iostream>
using namespace std;
class overload {
private:
int count;
public:
overload(int i)
: count(i)
{
}
overload operator++(int)
{
return (count++);
}
overload operator++()
{
count = count + 1;
return count;
}
void Display()
{
cout << "Count: " << count<<endl;
}
};
// Driver code
int main()
{
overload i(5);
overload post(5);
overload pre(5);
// this calls "function overload operator ++()" function
pre = ++i;
cout<<"results of I = ";
i.Display();
cout<<"results of preincrement = ";
pre.Display();
// this call "function overload operator ++()"function
i++;//just to show diff
i++; // just to show diff
post = i++;
cout<<"Results of post increment = ";
post.Display();
cout<<"And results of i , here we see difference : ";
i.Display();
return 0;
}
输出:
results of I = Count: 6
results of preincrement = Count: 6
Results of post increment = Count: 8
And results of i , here we see difference : Count: 9
示例3:重载this运算符:
#include <iostream>
using namespace std;
class overload {
int a[3];
public:
overload(int i, int j, int k)
{
a[0] = i;
a[1] = j;
a[2] = k;
}
int operator[](int i)
{
return a[i];
}
};
int main()
{
overload ob(1, 2, 3);
cout << ob[1]; // displays 2
return (0);
}
输出:
2个
示例4:重载->运算符:
#include <bits/stdc++.h>
using namespace std;
class GFG {
public:
int num;
GFG(int j)
{
num = j;
}
GFG* operator->(void)
{
return this;
}
};
// Driver code
int main()
{
GFG T(5);
GFG* Ptr = &T;
// Accessing num normally
cout << "T.num = " << T.num << endl;
// Accessing num using normal object pointer
cout << "Ptr->num = " << Ptr->num << endl;
// Accessing num using -> operator
cout << "T->num = " << T->num << endl;
return 0;
}
输出 :
T.num = 5
Ptr-> num = 5
T->num= 5
不能重载的运算符列表
1>范围解析运算符 (::)
2>指针到成员运算符(。*)
3>成员访问权限或点运算符(。)
4>三元或条件运算符(?:)
5>对象大小运算符(sizeof)
6>对象类型运算符(typeid)
示例5:重载此。(dot)运算符
点运算符不能重载,因此会导致错误。
#include <iostream>
#include <iostream>
class cantover {
public:
void fun();
};
class X { // assume that you can overload .
cantover* p;
cantover& operator.()
{
return *p;
}
void fun();
};
void g(X& x)
{
x.fun(); // X::fun or cantover::fun or error?
}
这个问题其实我们可以通过几种方式解决,大家可以自行尝试一下!
以上就是今天的全部内容了。每日分享小知识,希望对你有帮助~
另外如果你想更好的提升你的编程能力,学好C语言C++编程!弯道超车,快人一步!笔者这里或许可以帮到你~
C语言C++编程学习交流圈子,QQ群:981108780【点击进入】微信公众号:C语言编程学习基地
分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
编程学习视频分享:
以上是关于C/C++编程笔记:盘点那些不能重载的运算符!你记住了吗?的主要内容,如果未能解决你的问题,请参考以下文章