2012-07-20 43 views
0

假設我有一個結構(或我只用於存儲類)填充doubles s。我做一個構造函數分配給那些doubles S:自動創建成員,如果他們用於建設

struct Point { 
    double time; 
    double x; 
    double y; 
    Point(double a_time, double a_x, double a_y) 
    : time(a_time), x(a_x), y(a_y) {} 
} 

這似乎是多餘的,如果他們在構造函數中已經聲明在類中聲明成員。 有沒有辦法減少這些冗餘,使構造函數中使用的成員自動成爲類的公共成員?也可能對其他成員函數有用。

這個例子類似於Programming: Principles and Practice Using C++的第348頁上的例子。所以這是當代已建立的編碼風格。 此外,我正在尋找一種現代C++風格的解決方案,意思是沒有預處理器。

更新(1) 這個結構需要在以下方式中使用:

vector<Point> points 
points.push_back(t0,x0,y0) 
+0

你可以圍繞它做在某些情況下其他的方式:HTTP:// WWW2 .research.att.com /〜bs/C++ 0xFAQ.html#member-init – chris 2012-07-20 21:45:33

+0

你有什麼建議當類有多個構造函數? – 2012-07-20 21:48:33

+0

爲什麼要聲明構造函數中使用的所有類的public成員? – Martin 2012-07-20 21:48:56

回答

3

你有它的方式是完全正常的。但是,如果你想只給默認值,在C++ 11您可以直接成員初始化,你並不需要一個構造函數:

struct Point { 
    double time = 0.0; 
    double x = 0.0; 
    double y = 0.0; 
}; 

此外,它看起來像這樣的結構僅僅是一袋數據,如果是這樣的話也可以用集合初始化未經工程C++ 11:

實施例1

struct Point { 
    double time; 
    double x; 
    double y; 
} p = {0.0, 0.0, 0.0}; 

實施例2

struct Point { 
    double time; 
    double x; 
    double y; 
}; 

Point p1 = {0.0, 0.0, 0.0}; 

更新後

您可以使用push_back這樣一個扁平的數據類型:

v.push_back({t0, x0, y0}); 
+0

請參閱更新(1) – 2012-07-20 22:00:31

+1

@kirill_igum:我將刪除構造函數並使用'push_back'就像我的例子。 – 2012-07-20 22:03:06

+0

好的,只是檢查它。它的工作原理,謝謝 – 2012-07-20 22:15:02

相關問題