在繼承之外,在c++中乙個類成員函式呼叫另乙個類成員的方法主要有:類的組合,友元類,類的前向宣告,單例模式等,下面主要講講這4種方法的實現
組合通俗來講就是類b有類a的屬性,如宣告乙個person類,再宣告乙個teacher類,person類物件有年齡和姓名成員,而teacher類物件成員也有年齡和姓名屬性,所以我們可以將類person的物件作為類teacher的成員變數,那麼就實現了teacher類物件也有這兩個屬性。如下所示:
#include#includeusing namespace std;
class person
~person() {};
void print()
private:
int age;
string name;
};class teacher
~teacher() {};
void print()
private:
person* person;
};int main()
友元類就是在類a中宣告乙個類b,那麼就稱類b是類a的友元類,這時類b的物件可以訪問類a的一切成員,包括私有成員。如下所示:
#include#includeusing namespace std;
class a
~a() {};
void print_a()
private:
int age;
string name;
};class b
; ~b() {};
void print_b(a& a) };
int main()
注意:
1、友元類是單向的,即類b是類a的友元類,但類a不是類b的友元類
1、友元類不能傳遞,即類b是類a的友元類,類c是類b的友元類,但類c不是類a的友元類
使用前面兩種方法,如果將兩個類在不同的標頭檔案中宣告,則需要在第二個類中包含第乙個類的標頭檔案,但使用類的前向宣告則不用使用#include"***",具體實現如下:
**段1:在person.h標頭檔案
#pragma once
#ifndef _person_h
#define _person_h
#include #include class person
~person() {};
void print() const
private:
int age;
std::string name;
};#endif
**段2:在teacher.h標頭檔案中
#pragma once
#ifndef _teacher_h
#define _teacher_h
//#include "person.h" //前兩種方法
class person; //類的前向宣告
class teacher
; ~teacher() {};
void print(person& person)
};#endif
**段3:主檔案main.cpp
#include#include "person.h"
#include "teacher.h"
int main()
注意:
1、類的前向宣告只能用於定義指標、引用、以及用於函式形參的指標和引用
2、前向宣告的類是不完全的型別,因為只進行了宣告而沒有定義
前向宣告的作用:
1、在預處理時,不需要包含#include"***",相對節約編譯時間
2、方便的解決兩種類型別互相使用的問題。
單例模式是程式設計模式中最常用的模式之一,其主要思想是將類的建構函式宣告為私有的防止被外部函式例項化,內部儲存乙個private static的類指標儲存唯一的例項,例項的實現由乙個public的類方法代勞,該方法返回單例類唯一的例項。
注意:
#include#includeusing namespace std;
class singleton
~singleton() {};
private:
singleton() {};
static singleton* instance;
};
下面看怎麼在另乙個類中使用單例模式實現成員函式的呼叫:
class singleton
else
return instance;
} static void print_instance() };
int main()
C 類中乙個構造函式呼叫另乙個建構函式
class a a int aa,int bb,int cc 上面類中,已經有乙個建構函式,形參有兩個,我們又過載乙個有3個形參的建構函式,為了減少 量,就想著讓3個引數的構造函式呼叫2個引數的建構函式,然後在執行一些自己的 這就如同派生類先呼叫基類的同名函式,在執行自己特有的 這種機制如何實現呢?...
C 乙個類呼叫另乙個類的成員變數 成員函式
有時候,兩個類之間並沒有繼承的關係,但是其中乙個類需要引用另乙個類中的成員變數或者成員函式。怎樣辦到呢?假設已經新建了兩個類a b。class a class b 現在需要在類a的成員函式中呼叫類b的成員變數b nadd b x,使得a nadd與b nadd相加,那麼只需要在類a的.cpp檔案中包...
乙個類作為另乙個類的資料成員
寫程式的時候希望乙個類能夠訪問另乙個類的資料成員 protected,private 例如類a要訪問類b中的資料成員。1.保持封裝性 可以通過在被訪問的類 b 中定義訪問許可權為public的函式,用來返回資料成員的引用。2.繼承 當乙個派生類從父類繼承時,父類的所有成員就成為子類的成員,因此可以將...