成员函数重载运算符(c++中如何正确使用成员函数或者友元函数重载运算符)

:暂无数据 2026-08-30 22:40:02 :0

成员函数重载运算符(c++中如何正确使用成员函数或者友元函数重载运算符)

各位老铁们,大家好,今天由我来为大家分享成员函数重载运算符,以及c++中如何正确使用成员函数或者友元函数重载运算符的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

本文目录

c++中如何正确使用成员函数或者友元函数重载运算符

只要有一个操作数是自定义类型就可以重载。都是内置类型则不允许重载,比如你重载了算数+,编译器会乱套的。给你个例子: #include class A { public: A():a(0){} public: void display(){std::cout《

用成员函数重载运算符,使其对整型的运算符 = + -适用于分数运算

#include 《iostream》
using namespace std;

int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
class Rational
{
Rational make(int ta,int tb)
{
Rational x;
if(ta%tb==0)
{
x.a=ta/tb;
x.b=1;
}
else
{
int temp=ta》0?ta:-ta;
int t=gcd(temp,tb);
x.a=ta/t;
x.b=tb/t;
}
return x;
}
public:
int a,b;
Rational(int x,int y)
{
Rational t=make(x,y);
a=t.a;
b=t.b;
}
Rational(int x)
{
a=x;
b=1;
}
Rational()
{
a=0;
b=1;
}
bool operator==(Rational y)
{
return (a*y.b==b*y.a);
}
bool operator!=(Rational y)
{
return (a*y.b!=b*y.a);
}
bool operator《(Rational y)
{
return (a*y.b《b*y.a);
}
bool operator《=(Rational y)
{
return (a*y.b《=b*y.a);
}
bool operator》(Rational y)
{
return (a*y.b》b*y.a);
}
bool operator》=(Rational y)
{
return (a*y.b》=b*y.a);
}
Rational operator+(Rational temp)
{
return make(a*temp.b+b*temp.a,b*temp.b);
}
Rational operator-(Rational temp)
{
return make(a*temp.b-b*temp.a,b*temp.b);
}
Rational operator*(Rational temp)
{
return make(a*temp.a,b*temp.b);
}
Rational operator/(Rational temp)
{
return make(a*temp.b,b*temp.a);
}
friend ostream& operator《《(ostream&os,const Rational&x);
friend istream& operator》》(istream&is,Rational&x);
};
ostream& operator《《(ostream&os,const Rational&x)
{
if(x.b==1)
os《《x.a;
else
os《《x.a《《“/“《《x.b;
return os;
}
istream& operator》》(istream&is,Rational&x)
{
is》》x.a》》x.b;
if(x.b《0)
{
x.a=-x.a;
x.b=-x.b;
}
return is;
}

int main()
{
Rational p,q;
while(cin》》p》》q)
{
cout《《p+q《《“ “《《p-q《《“ “《《p*q《《“ “《《p/q《《“ “;
if(p《q)
cout《《“true“《《endl;
else
cout《《“false“《《endl;
}
return 0;
}

C++中关于用成员函数实现运算符重载的问题

对于同一个类的两个成员是不能互相访问私有数据的.
但也涉及到一个说法问题

假设这个类为
class Classtest{
private:
int value;

public:
//两个构造函数 :
Classtest(){value=0;}
Classtest(int j){value=j;}
//设置,和取值函数 :
void setvalue(int val){value=val;}
int getvalue(){return value;}
//重载加法操作符 :
Classtest operator +(Classtest&b){
return Classtest(this-》value+b.value);
}
};

A+B
可以获得结果是因为执行了A.operator+(B);
该函数是A的成员函数所以可以直接访问A的私有数据
由于在类内 所以B也可以访问自己的私有数据.
但不是A在访问B的私有数据.
注意这句话
int operator +(Classtest&b){return this-》value+b.value;}
对于B是通过b.value获得值,对于this是通过直接访问变量value来获得的.
如果在类外调用B.value;就会出错
因为类外B无法访问自己的私有数据,只能调用B的公有成员函数(该函数是类内的代码,所以他可以访问类的私有数据)
------------------------------
#include 《stdio.h》
#include 《stdlib.h》
class Classtest{
private:
int value;

public:
//两个构造函数 :
Classtest(){value=0;}
Classtest(int j){value=j;}
//设置,和取值函数 :
void setvalue(int val){value=val;}
int getvalue(){return value;}
//重载加法操作符 :
Classtest operator +(Classtest&b){
return Classtest(this-》value+b.value)//这个地方也可以使用b.getvalue();;
}
};

int main(void)
{
class Classtest j,b;
j.setvalue(2);
b.setvalue(4);
printf(“%d\n“,(j+b).getvalue());
;system(“pause“);

}

比较用成员函数和用友元函数重载运算符的异同点

重载双目运算符可以用友元或者成员函数,但是两者有区别
例如用成员函数重载了
+
之后(假设赋值运算符
=
已经被重载)
ob
=
ob
+
100是被支持的,而ob
=
100
+
ob就是不被允许的
这种情况下就要使用友元函数来对运算符重载以避免不必要的麻烦

以成员函数的形式重载关系运算符,使用半径比较Circle对象大小

#include《iostream》

class Circle

{

public:

Circle(float r):r(r)

{

}

bool operator《(const Circle &c)

{

return r《c.r;

}

bool operator》(const Circle &c)

{

return r》c.r;

}

bool operator==(const Circle &c)

{

return r==c.r;

}

bool operator》=(const Circle &c)

{

return !(*this《c);

}

bool operator《=(const Circle &c)

{

return !(*this》c);

}

bool operator!=(const Circle &c)

{

return !(*this==c);

}

private:

float r;

};

using namespace std;

int main()

{

float r1,r2;

cin》》r1》》r2;

Circle c1(r1),c2(r2);

cout《《boolalpha;

cout《《(c1《c2)《《endl;

cout《《(c1《=c2)《《endl;

cout《《(c1==c2)《《endl;

cout《《(c1!=c2)《《endl;

cout《《(c1》c2)《《endl;

cout《《(c1》=c2)《《endl;

return 0;

}

关于成员函数重载运算符,c++中如何正确使用成员函数或者友元函数重载运算符的介绍到此结束,希望对大家有所帮助。

成员函数重载运算符(c++中如何正确使用成员函数或者友元函数重载运算符)

本文编辑:admin

更多文章:


promote翻译(英语翻译倡导怎么说)

promote翻译(英语翻译倡导怎么说)

其实promote翻译的问题并不复杂,但是又很多的朋友都不太了解英语翻译倡导怎么说,因此呢,今天小编就来为大家分享promote翻译的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 06:30

用手机如何导航?开车用手机导航哪个软件最好

用手机如何导航?开车用手机导航哪个软件最好

今天给各位分享用手机如何导航的知识,其中也会对用手机如何导航进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 06:20

多线程技术有什么用(多线程有什么作用)

多线程技术有什么用(多线程有什么作用)

其实多线程技术有什么用的问题并不复杂,但是又很多的朋友都不太了解多线程有什么作用,因此呢,今天小编就来为大家分享多线程技术有什么用的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 05:40

another time(another time和other time的区别)

another time(another time和other time的区别)

大家好,another time相信很多的网友都不是很明白,包括another time和other time的区别也是一样,不过没有关系,接下来就来为大家分享关于another time和another time和other time的区

2026年10月11日 05:00

java开发工具包jdk(JDK是什么意思)

java开发工具包jdk(JDK是什么意思)

其实java开发工具包jdk的问题并不复杂,但是又很多的朋友都不太了解JDK是什么意思,因此呢,今天小编就来为大家分享java开发工具包jdk的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 04:50

mysql 命令(MySQL的基本命令)

mysql 命令(MySQL的基本命令)

大家好,如果您还对mysql 命令不太了解,没有关系,今天就由本站为大家分享mysql 命令的知识,包括MySQL的基本命令的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 03:00

手机云备份是什么意思?手机上的云备份有什么用 怎么用呢

手机云备份是什么意思?手机上的云备份有什么用 怎么用呢

各位老铁们,大家好,今天由我来为大家分享云备份,以及手机云备份是什么意思的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年10月11日 02:40

java遍历map的key(java Map 怎么遍历)

java遍历map的key(java Map 怎么遍历)

大家好,java遍历map的key相信很多的网友都不是很明白,包括java Map 怎么遍历也是一样,不过没有关系,接下来就来为大家分享关于java遍历map的key和java Map 怎么遍历的一些知识点,大家可以关注收藏,免得下次来找不

2026年10月11日 02:20

微信xlsx文件怎么打开(苹果手机微信打开excel)

微信xlsx文件怎么打开(苹果手机微信打开excel)

大家好,关于微信xlsx文件怎么打开很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于苹果手机微信打开excel的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月11日 01:10

reduce用法和短语(减少的英文短语有哪些)

reduce用法和短语(减少的英文短语有哪些)

其实reduce用法和短语的问题并不复杂,但是又很多的朋友都不太了解减少的英文短语有哪些,因此呢,今天小编就来为大家分享reduce用法和短语的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 00:40

最近更新

promote翻译(英语翻译倡导怎么说)
2026-10-11 06:30:03 浏览:0
热门文章

标签列表