Chapter 5.5 物件加法運算 - TKU-ME-Lab/C-C-_tutorial GitHub Wiki
#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
#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
#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;
}
#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;
}