Home Item 21 - aggregate classes (中文)
Post
Cancel

Item 21 - aggregate classes (中文)

聚合類

聚合類(aggregate classes)是一種特殊類型的類型,主要特徵是其成員可以直接使用大括號初始化器進行初始化 來看以下的例子吧

1
2
3
4
5
6
7
8
struct Point {
    int x;
    int y;
};


Point p{50,100};

上述這個簡單的 struct, 可以直接使用大括號進行初始化

Point p{50,100};

在 C++17 之前,聚合類必須滿足以下條件:

  1. 沒有用戶自定義的構造函數(包括默認構造函數)。
  2. 沒有私有或受保護的非靜態數據成員。
  3. 沒有虛擬函數。
  4. 沒有基類。 這些限制使得聚合類通常是簡單的數據結構,如結構體或類,限制很多啦!

C++17 放寬了聚合類的定義,允許以下條件:

  1. 可以有基類,只要基類也是聚合類且沒有私有或受保護的非靜態數據成員。(上述第四項)
  2. 可以有非靜態數據成員(包括對象和引用)。(上述第2項)

直接看 code

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>

class Base {
    public:
    int base_val;
};

class Derived : public Base {
    public:
    std::string derived_val;
};

main 如下: Desktop View

執行結果 in C++14

Desktop View

執行結果 in C++17

Desktop View

好處

簡化初始化:使用聚合初始化使得代碼更簡潔! 就這樣!

☝ツ☝

This post is licensed under CC BY 4.0 by the author.

👈 ツ 👍