C 中乙個類成員函式呼叫另乙個類成員的方法

2021-10-03 13:25:17 字數 2490 閱讀 4438

在繼承之外,在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.繼承 當乙個派生類從父類繼承時,父類的所有成員就成為子類的成員,因此可以將...