Chapter 5.5 物件加法運算 - TKU-ME-Lab/C-C-_tutorial GitHub Wiki

<1>物件加法運算

#include<iostream>
using namespace std;

class Oddsum
{
     static int sum;
public:
     static void addition(int n);
     void display();
};

int Oddsum::sum = 0;

void Oddsum::addition(int n)
{
     sum += n;   //sum(n+1)=sum(n)+n
}
void Oddsum::display()
{
     cout << "sum=" << sum << endl;
}
int main()
{
     Oddsum a;
     for (int count = 1; count <= 100; count+=2)
     {
          a.addition(count);
     }
     a.display();
     system("pause");
     return 0;
}

傳遞物件參數

傳遞物件參數與傳遞一般變數參數是一樣的.在定義成員函數時,使用類別型態的參數,如void sum(Calculate obj)

函數型態 函數名稱(類別名稱 參數名稱)
{
     //函數本體
}


class Calculate
{
     int x;
public:
     Calculate(int n)
     {
          x = n;
     }   //建構子
     void sum(Calculate obj)
     {
          x += obj.x;
     }
};
int main()
{
     Calculate a(100),b(200);
     a.sum(b);
     system("pause");
     return 0;
}
//以a物件呼叫sum函數,並傳遞b物件給sum函數
因此sum函數的x表示a物件的變數x,而obj.x則表示b物件的變數x
或者說,this->表示a物件指標的變數x,而obj.x則表示b物件的變數x

傳遞物件指標參數與傳遞一般變數參數是一樣的.在定義成員函數時,使用類別指標型態的參數,如void sum(Calculate *obj)

函數型態 函數名稱(類別名稱 *參數名稱)
{
     //函數本體
}

呼叫成員函數時,將物件位址傳遞給成員函數,如a.(&B);的&B為物件位址

物件名稱.類別成員(&物件參數)   //呼叫成員函數


    class Calculate
{
     int x;
public:
     Calculate(int n)
     {
          x = n;
     }   //建構子
     void sum(Calculate *obj)
     {
          x += obj->x;
     }
};
int main()
{
     Calculate a(100),b(200);
     a.sum(&b);
     system("pause");
     return 0;
}
//以a物件呼叫sum函數,並傳遞b物件位址給sum函數
因此sum函數的x表示a物件的變數x,而obj->x則表示b物件的變數x
或者說,this->x表示a物件指標的變數x,而obj->x則表示b物件的變數x

<2>物件加法運算

#include<iostream>
using namespace std;

class Calculate
{
     int x;
public:
     Calculate(int);
     void sum(Calculate);
     void display();
};
Calculate::Calculate(int n)
{
     x = n;
}
void Calculate::sum(Calculate obj)
{
     x += obj.x;
}
void Calculate::display()
{
     cout << x;
}
int main()
{
     Calculate a(100),b(200);
     a.display();
     cout << '+';
     b.display();
     cout << '=';
     a.sum(b);
     a.display();
     cout << endl;
     system("pause");
     return 0;
}

傳回類別資料

此語法在函數表頭宣告傳回型態為類別名稱,在函數本體中先建立一個類別物件,最後利用return敘述傳回類別物件給呼叫敘述

函數型態 函數名稱(參數列)
{
     //函數本體
     return 類別物件名稱;
}


class Calculate
{
     int x;
public:
     Calculate(int n){x = n;}   //建構子
     Calculate calculate(Calculate obj)
     {
          x += obj.x;
          return *this;
     }
};
int main()
{
     Calculate a(100),b(200),c(0);
     c = a. calculate(b);
     system("pause");
     return 0;
}
//函數表頭的傳回型態是類別物件Calculate
而呼叫時則使用a.calcSum(b)表示以a物件呼叫並傳遞b物件給calcSum函數
calcSum函數結束返回時的return *this表示傳回呼叫物件a的指標內值
最後c=a.calcSum(b)表示將運算值存入c

此語法在函數表頭宣告傳回型態為類別指標,在函數本體中先建立一個類別物件,最後利用return敘述傳回類別物件給呼叫敘述

函數型態 *函數名稱(參數列)
{
     //函數本體
     return 類別物件指標;
}


class Calculate
{
     int x;
public:
     Calculate(int n)
     {
          x = n;
     }   //建構子
     Calculate *calculate(Calculate obj)
     {   
          x += obj.x;
          return *this;
     }
};
int main()
{
     Calculate a(100),b(200),c(0);
     c = *(a. calculate(b));
     system("pause");
     return 0;
}
//函數表頭的傳回型態是類別物件Calculate *
而呼叫時則使用*(a.calcSum(b))表示將取得函數a.caluSum(b)傳回指標內的值
calcSum函數結束返回時的return this表示傳回呼叫物件a的指標
最後c=*(a.calcSum(b))表示將傳回指標內的值存入c

<3>物件加法運算

#include<iostream>
using namespace std;

class Calculate
{
     int x;
public:
     Calculate(int n);
     Calculate calcSum(Calculate obj);   //加法運算函數原型
     void showSum(Calculate a, Calculate b);   //輸出物件函數原型
};
Calculate::Calculate(int n)
{
     x = n;
}
Calculate Calculate::calcSum(Calculate obj)
{
     x += obj.x;
     return *this;
}
void Calculate::showSum(Calculate a,Calculate b)
{
     cout << "a = " << a.x << endl;
     cout << "b = " << b.x << endl;
     cout << "a + b = " << this ->x << endl;
}
int main()
{
     Calculate a(100),b(200),c(0);
     c = a.calcSum(b);
     c.showSum(a, b);
     system("pause");
     return 0;
}

<4>物件加法運算

#include<iostream>
using namespace std;

class Calculate
{
     int x;
public:
     Calculate(int n);
     Calculate *calcSum(Calculate obj);   //加法運算函數原型
     void showSum(Calculate a, Calculate b);   //輸出物件函數原型
};
Calculate::Calculate(int n)
{
     x = n;
}
Calculate *Calculate::calcSum(Calculate obj)
{
     x += obj.x;
     return this;
}
void Calculate::showSum(Calculate a,Calculate b)
{
     cout << "a = " << a.x << endl;
     cout << "b = " << b.x << endl;
     cout << "a + b = " << this ->x << endl;
}
int main()
{
     Calculate a(100),b(200),c(0);
     c = *(a.calcSum(b));
     c.showSum(a, b);
     system("pause");
     return 0;
}
⚠️ **GitHub.com Fallback** ⚠️