• 类和对象(13)—— 全局函数与成员函数


    1、把全局函数转化成成员函数,通过this指针隐藏左操作数

    Test add(Test &t1,Test &t2)    ===>Test add(Test &t2) 

    2、把成员函数转换成全局函数,多了一个参数

    void printAB() ===>void printAB(Test *pthis)

    3、函数返回元素和返回引用

    案例一:实现两个test相加

    利用全局函数实现两个test相加

    #include <iostream>
    using namespace std;
    
    class Test
    {
    public:
        Test(int a, int b)
        {
            this->a = a;
            this->b = b;
        }
    
        void printT()
        {
            cout << "a:" << this->a << ",b:" << this->b << endl;
        }
    
        int getA()
        {
            return this->a;
        }
    
        int getB()
        {
            return this->b;
        }
    private:
        int a;
        int b;
    };
    
    //在全局提供一个两个test相加的函数
    Test TestAdd(Test &t1, Test &t2)
    {
        Test temp(t1.getA() + t2.getA(), t1.getB() + t2.getB());
        return temp;
    }
    
    int main(void)
    {
        Test t1(10, 20);
        Test t2(100, 200);
    
        Test t3 = TestAdd(t1, t2);
        t3.printT();//a:110,b:220
    
        return 0;
    }

    利用成员函数实现两个test相加:

    #include <iostream>
    using namespace std;
    
    class Test
    {
    public:
        Test(int a, int b)
        {
            this->a = a;
            this->b = b;
        }
    
        void printT()
        {
            cout << "a:" << this->a << ",b:" << this->b << endl;
        }
    
        int getA()
        {
            return this->a;
        }
    
        int getB()
        {
            return this->b;
        }
    
        //用成员方法实现两个test相加,函数返回元素
        Test TestAdd(Test &another)
        {
            Test temp(this->a + another.getA(), this->b + another.getB());
            return temp;
        }
    private:
        int a;
        int b;
    };
    
    int main(void)
    {
        Test t1(10, 20);
        Test t2(100, 200);
    
        Test t3 = t1.TestAdd(t2);
        t3.printT();//a:110,b:220
    
        return 0;
    }

    案例二:实现test的+=操作

    #include <iostream>
    using namespace std;
    
    class Test
    {
    public:
        Test(int a, int b)
        {
            this->a = a;
            this->b = b;
        }
    
        void printT()
        {
            cout << "a:" << this->a << ",b:" << this->b << endl;
        }
    
        int getA()
        {
            return this->a;
        }
    
        int getB()
        {
            return this->b;
        }
      //+=方法
    void TestAddEqual(Test &another) { this->a += another.a; this->b += another.b; }
    private: int a; int b; }; int main(void) { Test t1(10, 20); Test t2(100, 200); t1.TestAddEqual(t2); t1.printT(); return 0; }

    案例三:连加等

    #include <iostream>
    using namespace std;
    
    class Test
    {
    public:
        Test(int a, int b)
        {
            this->a = a;
            this->b = b;
        }
    
        void printT()
        {
            cout << "a:" << this->a << ",b:" << this->b << endl;
        }
    
        int getA()
        {
            return this->a;
        }
    
        int getB()
        {
            return this->b;
        }
    
        //如果想对一个对象连续调用成员方法,每次都会改变对象本身,成员方法需要返回引用
        Test& TestAddEqual(Test &another)//函数返回引用
        {
            this->a += another.a;
            this->b += another.b;
    
            return *this;//如果想返回一个对象本身,在成员方法中,用*this返回
        }
    private:
        int a;
        int b;
    };
    
    int main(void)
    {
        Test t1(10, 20);
        Test t2(100, 200);
    
        t1.TestAddEqual(t2).TestAddEqual(t2);
        t1.printT();//a:210,b:420
    
        return 0;
    }
  • 相关阅读:
    scrapy之download middleware
    远程采集
    未能加载文件或程序集“Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyTok”
    【转】如何解决C盘根目录无法创建或写入文件
    C#报算术运算导致溢出的错误
    【转】C# String 前面不足位数补零的方法
    【转】C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字
    【转】Asp.Net页面生命周期
    【转】processOnServer
    【转】oracle的分析函数over
  • 原文地址:https://www.cnblogs.com/yuehouse/p/9811491.html
Copyright © 2020-2023  润新知