1. 程式人生 > >C++組合(聚合)與C結構體中包含函式

C++組合(聚合)與C結構體中包含函式

C++組合(聚合)與C結構體中包含函式


今天突然想到C++的聚合,以前一直沒有注意,今天想到就寫下來,做個筆記;
C++的類與我們的C語言中的結構體特別像,但是有有些不太一樣,這裡不多累贅了不能,大家學過的都知道。


C++組合(聚合)
我們知道的都是C++的類的物件,也就是例項化的過程,但是,有時候一些類我門需要他以聚合的形式來使用,比如設計模式裡面用的比較多一些。
接下來,我門看一個例子:

  1 #include<iostream>
  2 using namespace std;
  3 
  4 class Sum
  5 {
  6 public:
  7     void Print()
  8     {
  9         cout<<"hello 1111"<<endl;
 10     }
 11 };
 12 
 13 class Dev
 14 {
 15 public:
 16     Sum* sum;
 17     void haha()
 18     {
 19         cout<<"hello 22"<<endl;
 20         sum->Print();
 21     }
 22 };
 23 int main()
 24 {
 25     Dev dev;
 26     dev.haha();
 27     return 0;
 28 }

從程式碼中,我們就可以看出,Sum這個類的使用就是聚合的方式,呼叫方式和我們例項化後呼叫的方式是一樣的,沒有什麼大的區別。(16行使用聚合的方式)


接下來,我們看一下C語言中的結構體,可以進行對比一樣

  1 #include<stdio.h>
  2 void Print()
  3 {
  4     printf("hello 000\n");
  5 }
  6 struct Test
  7 {   
  8     void (*Print)();
  9 };
 10 int main()
 11 {   
 12     struct Test test;
 13     test.Print = Print;
 14     test.Print();
 15     return 0;
 16 }

我們知道,C語言的結構體不可以像C++的類一樣實現和申明函式,所以只能通過函式指標的方式來實現。程式碼第8行和程式碼13行實現了這個功能。