1. 程式人生 > >向函式傳遞物件(C++學習筆記 24)

向函式傳遞物件(C++學習筆記 24)

一、使用物件作為函式引數

在向函式傳遞物件時,是通過 “ 傳值呼叫 ” 傳遞給函式的,即單向傳遞,只由實參傳給形參,而不能由形參傳回來給實參。因此函式中對物件的任何修改均不影響呼叫該函式的物件(實參)本身。

例 1 :使用物件作為函式引數

#include<iostream>
using namespace std;
class Tr{
	public:
		Tr(int n){
			i=n;
		} 
		void set_i(int n){
			i=n;
		}
		int get_i(){
			return i;
		}
	private:
		int
i; }; void sqr_it(Tr ob){ //物件ob作為函式sqr_it的形參 ob.set_i(ob.get_i()*ob.get_i()); cout<<"在函式 sqr_it 內,形參物件ob的資料成員 i 的值為:"<<ob.get_i()<<endl; } int main(){ Tr obj(10); cout<<"呼叫函式sqr_it前,實參物件obj的資料成員 i 的值為:"; cout<<obj.get_i()<<endl; sqr_it(obj); //呼叫函式sqr_it,實參為物件obj
cout<<"呼叫函式sqr_it後,實參物件obj的資料成員i的值為:"; cout<<obj.get_i(); return 0; }

執行結果為:
在這裡插入圖片描述

二、使用物件指標作為函式引數

使用物件指標作為函式引數可以實現 “ 傳址呼叫 ” ,即在函式呼叫時使實參物件和形參物件指標變數指向同一記憶體地址,在函式呼叫過程中,對形參物件指標所指物件值的改變也同樣影響著實參物件的值。

例 2 :使用物件指標作為函式引數。

#include<iostream>
using namespace std;
class Tr{
	public:
		Tr
(int n){ i=n; } void set_i(int n){ i=n; } int get_i(){ return i; } private: int i; }; void sqr_it(Tr *ob){ ob->set_i(ob->get_i()*ob->get_i()); cout<<"在函式sqr_it內,形參物件ob的資料成員 i 的值為:"<<ob->get_i()<<endl; } int main(){ Tr obj(10); cout<<"呼叫函式sqr_it前,實參物件obj的資料成員 i 的值為: "; cout<<obj.get_i()<<endl; sqr_it(&obj); //呼叫函式sqr_it,實參為物件obj的地址 cout<<"呼叫函式sqr_it後,實參物件obj的資料成員 i 的值為:"; cout<<obj.get_i(); return 0; }

執行結果為:
在這裡插入圖片描述

三、使用物件引用作為函式引數

用物件引用取代物件指標作為函式引數比較普遍,因為使用物件引用作為函式引數不但具有物件指標用作函式引數的優點,而且用物件引用作為函式引數將更簡單、更直接。

例 3 :使用物件引用作為函式引數。

#include<iostream>
using namespace std;
class Tr{
	public:
		Tr(int n){
			i=n;
		}
		void set_i(int n){
			i=n;
		}
		int get_i(){
			return i;
		}
	private:
		int i;
};
void sqr_it(Tr &ob){   //物件引用作為函式sqr_it的形參 
	ob.set_i(ob.get_i()*ob.get_i());
	cout<<"在函式sqr_it內,形參物件ob的資料成員 i 的值為:"<<ob.get_i()<<endl;
}
int main(){
	Tr obj(10);
	cout<<"呼叫函式sqr_it前,實參物件obj的資料成員 i 的值為: ";
	cout<<obj.get_i()<<endl;
	sqr_it(obj);  //呼叫函式sqr_it,實參為物件obj
	cout<<"呼叫函式sqr_it後,實參物件obj的資料成員 i 的值為:";
	cout<<obj.get_i();
	return 0; 
}

執行結果為:
在這裡插入圖片描述