结构体的操作符重载和内部的函数定义及使用(结构体的进一步使用)

本文探讨了C++中结构体的运算符重载,包括=、IO输出、+、-、*操作符的重载,并讲解了结构体内部定义函数和外部实现的细节。同时,介绍了结构体指针变量的三种定义方式以及函数指针的定义和使用。文章还提到了结构体中包含函数指针的概念,以实现类似类的功能。
摘要由CSDN通过智能技术生成

首先结构体和类是有相似的地方的,可以进行运算符重载。

下面以=为例,

#include<iostream>  
using namespace std;  
struct P  
{  
    int a;  
    int b;  
    //虽然已经对结构体进行=重载,但是这里只是举一个例子而已  
    P& operator=(P& temp)  
    {  
        a=temp.a;  
        b=temp.b;  
                return *this;  
        }  
};  
int main()  
{  
    P p={1,2};  
        P x;  
        x=p;  
        cout<<x.a;//输出:1  
    return 0;  
}  


还有结构体运算符的重载是不能用友元函数来重载的,因为友元是针对类,结构体虽和类相似,但是毕竟不是类,也无法和类“相等”。

不过我也发现可以在结构体内写个构造函数等。。


#include<iostream>  
using namespace std;  
struct P  
{  
    int a;  
    int b;  
  
    //P(){}  
    //P(int x,int y):a(x),b(y){}  
    P(int x=0,int y=0):a(x),b(y){}  
        void ShowAdd(){cout<<a+b<<endl;}  
 };  
int main()  
{  
    P temp;//right  
        //P p1={1,2};//error  
        P p2(1,2);//right  
        p.ShowAdd();//输出:3  
        cout<<p.a<<endl;//输出:1  
        return 0;  
}  
这样的话,结构体几乎就和类一样了。注意结构体中定义的变量和方法是public的。

这里要解释下下面这几句代码

//P(){}  
//P(int x,int y):a(x),b(y){}  
P(int x=0,int y=0):a(x),b(y){}  

如果你写了第三行的代码,那就千万不要写第一第二行,为什么?放你编译器运行看看吧,这里只是提个醒,不作解释,很简单。

结构体运算符重载

1、定义结构体

struct  Currency
{
     int  Dollar;
     int  Cents;
}

2、重载IO输出操作,在结构体内部将输入操作的重载定义为友元函数重载

friend  ostream &operator<<(ostream &out,Currency value);

在结构体外部进行具体定义

ostream& operator<<(ostream &out,Currency value)
{
     out<< "The dollar = " <<value.Dollar<< " and The Cents = " <<value.Cents<<endl;
     return  out;
}

3、重载结构体的“=”操作符(在结构体内部)

Currency& operator=(Currency& value)
     {
         Dollar = value.Dollar;
         Cents = value.Cents;
         return  * this ;
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值