C++运算符重载 成员函数与友元函数详解_C 语言

复制代码 代码如下:

#include<iostream>
using namespace std;
class A
{
    int x,y;
    public:
    A(int xx,int yy):x(xx),y(yy){}
    A(){x=0;y=0;}
    A operator+(const A&b) //不加const限定,也可以
    { return A(x+b.x,y+b.y); }
    A operator-()
    { return A(-x,-y); }
    void show()
    {cout<<"x="<<x<<" y="<<y<<endl;}
};
void test_A()
{
    A a1(2008,512),a2(2013,420),a3;
    a3=a1+a2; //调用操作符重载函数: a1.oprator +(a2)
    a3.show();
    a1=-a1; //调用操作符重载函数: a1.operator -()
    a1.show();
}
/***********************
执行结果
x=4021 y=93
x=-2008 y=-512
**********************/
class B
{
    int x,y;
    public:
        B(int xx,int yy):x(xx),y(yy){}
        B(){x=0;y=0;}
        friend B operator+(const B&a,const B&b);
        friend B operator-(const B&a);
        void show()
        {cout<<"x="<<x<<" y="<<y<<endl;};
};
B operator+(const B&a,const B&b)
{return B(a.x+b.x,a.y+b.y);}
B operator-(const B&a)
{return B(-a.x,-a.y);}
/***************************
class B
{
    int x,y;
    public:
        B(int xx,int yy):x(xx),y(yy){}
        B(){x=0;y=0;}
        friend B operator+(const B&a,const B&b)
                {return B(a.x+b.x,a.y+b.y);}
        friend B operator-(const B&a)
            {return B(-a.x,-a.y);}
        void show()
        {cout<<"x="<<x<<" y="<<y<<endl;};
}
********************************/
int main()
{
    B B1(1991,1105),B2(2013,62),B3;
    B3=B1+B2; //调用操作符重载函数: a1.oprator +(a2)
    B3.show();
    B1=-B1; //调用操作符重载函数: a1.operator +()
    B1.show();
}
/****************************
运行结果:
x=4004 y=1167
x=-1991 y=-1105
Process returned 0 (0x0)   execution time : 0.021 s
Press any key to continue.

*****************************/

复制代码 代码如下:

#include<iostream>
using namespace std;
class A
{
    int x,y;
    public:
    A(int xx,int yy):x(xx),y(yy){}
    A(){x=0;y=0;}
    A operator+(const A&b) //不加const限定,也可以
    { return A(x+b.x,y+b.y); }
    A operator-()
    { return A(-x,-y); }
    void show()
    {cout<<"x="<<x<<" y="<<y<<endl;}
};
void test_A()
{
    A a1(2008,512),a2(2013,420),a3;
    a3=a1+a2; //调用操作符重载函数: a1.oprator +(a2)
    a3.show();
    a1=-a1; //调用操作符重载函数: a1.operator -()
    a1.show();
}
/***********************
执行结果
x=4021 y=93
x=-2008 y=-512
**********************/
class B
{
    int x,y;
    public:
        B(int xx,int yy):x(xx),y(yy){}
        B(){x=0;y=0;}
        friend B operator+(const B&a,const B&b);
        friend B operator-(const B&a);
        void show()
        {cout<<"x="<<x<<" y="<<y<<endl;};
};
B operator+(const B&a,const B&b)
{return B(a.x+b.x,a.y+b.y);}
B operator-(const B&a)
{return B(-a.x,-a.y);}
/***************************
class B
{
    int x,y;
    public:
        B(int xx,int yy):x(xx),y(yy){}
        B(){x=0;y=0;}
        friend B operator+(const B&a,const B&b)
                {return B(a.x+b.x,a.y+b.y);}
        friend B operator-(const B&a)
            {return B(-a.x,-a.y);}
        void show()
        {cout<<"x="<<x<<" y="<<y<<endl;};
}
********************************/
int main()
{
    B B1(1991,1105),B2(2013,62),B3;
    B3=B1+B2; //调用操作符重载函数: a1.oprator +(a2)
    B3.show();
    B1=-B1; //调用操作符重载函数: a1.operator +()
    B1.show();
}
/****************************
运行结果:
x=4004 y=1167
x=-1991 y=-1105
Process returned 0 (0x0)   execution time : 0.021 s
Press any key to continue.
*****************************/

时间: 2024-09-29 10:29:29

C++运算符重载 成员函数与友元函数详解_C 语言的相关文章

C++之友元:友元函数和友元类详解_C 语言

一.友元介绍我们知道,类的成员函数可以访问同类的其他成员函数,包括公有.私有和保护成员.而类的外部函数只能访问类的公有成员. 友元是一种允许非类成员函数访问类的非公有成员的一种机制.可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元. 友元函数友元类 二.友元函数友元函数在类作用域外定义,但它需要在类体中进行说明为了与该类的成员函数加以区别,定义的方式是在类中用关键字friend说明该函数,格式如下: friend  类型 友元函数名(参数表);友元的作用在于提高程序的运行效率 友

C++友元函数与拷贝构造函数详解_C 语言

一.友元函数 1.友元函数概述: (1)友元函数是定义在一个类外的普通函数. 友元函数和普通函数的定义一样;在类内必须将该普通函数声明为友元. (2)友元函数不是成员函数. 不能通过对象来调用,而是直接调用;友元函数可以访问类的公有.受保护以及私有成员,但是必须通过对象.对象指针或者对象引用来访问. 2.友元函数的声明: friend 返回值类型 函数名(参数表); 在类中只需要将这个声明放置在公有部分即可. class Point { double x, y; public: Point(){

C语言 函数指针(指向函数的指针)详解_C 语言

一个函数总是占用一段连续的内存区域,函数名在表达式中有时也会被转换为该函数所在内存区域的首地址,这和数组名非常类似.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数.这种指针就是函数指针. 函数指针的定义形式为: returnType (*pointerName)(param list); returnType 为函数返回值类型,pointerNmae 为指针名称,param list 为函数参数列表.参数列表中

C++指向函数的指针用法详解_C 语言

本文以实例形式展示了C++指向函数的指针用法,是深入学习C++所必须掌握的关键知识点.分享给大家供大家参考之用.具体方法如下: 函数指针 现来看看以下声明语句,看看其含义: float (*h(int, void (*)(int)))(int); 以下是一个变量指针的定义语句: float* pf; 以下是一个普通函数的声明语句: float f(); 请看以下声明语句: float* g(); 因为()的优先级高于*, 所以相当于: float* (g()); g是一个函数, 返回值为floa

深入C++ 函数映射的使用详解_C 语言

想想我们在遇到多语句分支时是不是首先想到的是 switc case 和 if else if ...这2种方式在编码方面确实简单少,但是当分支达到一定数量后,特别是分支内部有嵌套大段代码或者再嵌套分支,代码会显得异常臃肿,十分难以维护,对于if else if 语句过多的分支带来过多的判定句,势必会影响效率. 3种替代方法简述:1.使用map,需要构建树和节点,比数组的方式消耗更多的内存,查询时间复杂度为Log(N),但扩展起来方便. 2.使用数组,查询直接索引定位, 一般来讲我们是连续的初始化

C++运算符重载规则详解_C 语言

C++允许重载的运算符和不允许重载的运算符 C++中绝大部分的运算符允许重载,具体规定见表 不能重载的运算符只有5个: .  (成员访问运算符) .*  (成员指针访问运算符) ::  (域运算符) sizeof  (长度运算符) ?:  (条件运算符) 前两个运算符不能重载是为了保证访问成员的功能不能被改变,域运算符和sizeof 运算符的运算对象是类型而不是变量或一般表达式,不具备重载的特征. C++运算符重载的规则 C++对运算符重载定义了如下几条规则. 1) C++不允许用户自己定义新的

C++重载运算符的规则详解_C 语言

(1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载.例如,有人觉得BASIC中用"* *"作为幂运算符很方便,也想在C++中将"* *"定义为幂运算符,用"3* *5"表示35,这是不行的. (2)C++允许重载的运算符C++中绝大部分运算符都是可以被重载的. 不能重载的运算符只有5个: .             (成员访问运算符) .*            (成员指针访问运算符) ::             (域运

C++的get()函数与getline()函数使用详解_C 语言

C++ get()函数读入一个字符 get()函数是cin输入流对象的成员函数,它有3种形式:无参数的,有一个参数的,有3个参数的. 1) 不带参数的get函数 其调用形式为 cin.get() 用来从指定的输入流中提取一个字符(包括空白字符),函数的返回值就是读入的字符. 若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF(End Of File),一般以-1代表EOF,用-1而不用0或正值,是考虑到不与字符的ASCII代码混淆,但不同的C ++系统所用的EOF值有可能不同. [例]

c++运算符重载基础知识详解_C 语言

实际上,很多C++运算符已经被重载.eg:将*运算符用于地址,将得到存储在这个地址中的值,将他用于2个数字时,得到的将是他们的乘积.C++根据操作数的数目和类型来决定采用哪种操作. C++允许将运算符重载扩展到用户定义的类型.例如,允许使用+将两个对象相加.编译器将根据操作数的数目和类型决定使用加法定义.运算符重载可以使代码看起来更自然.例如,将2个数组相加是一种常见的运算.通常,需要使用下面这样的for循环来实现: 复制代码 代码如下: for (int i = 0; i < 20; i++)

C++中inline函数详解_C 语言

本文主要记录了C++中的inline函数,也就是内联函数,主要记录了以下几个问题: 一.C++为什么引入inline函数? 主要目的:用它代替C语言中表达式形式的宏定义来解决程序中函数调用的效率问题. C语言中的宏定义:#define ExpressionName(var1,var2) (var1+var2)*(var1-var2)这种宏定义,它使用预处理器实现,没有了参数压栈.代码生成等一系列得到操作,因此效率很高.但缺点如下: 仅仅是做预处理器符号表中的简单替换,因此不能进行参数有效性的检测