2016-12-15 67 views
-2

我有幾個類使用相同的結構作爲私有成員。 是否有可能創建我可以在類中使用的結構getter函數? 我覺得喜歡創造funcs。因爲每個班級都不是正確的做法。嵌入類的結構方法

事情是這樣的:

someheader 

struct A { 
    A(const int& vl) : someval(vl) {} 
    int someval{0}; 
    int getSomeval() const {return someval;} 
}; 

B 
include "someheader.h" 
class B { 
public: 
    B(); 

private: 
    A a; 
}; 

int main() { 
    B b; 
    int v = b.getSomeval(); 
} 
+0

偏離主題,但爲什麼在你的構造函數中使用int作爲引用? – Stargateur

+0

朋友........ – pm100

回答

1

編輯:作爲@HolyBlackCat提到,使用私有繼承,而不是一個私有成員,那麼using聲明帶來的私人基類的成員函數進入公衆範圍:

class B : A { 
public: 
    B(int i) : A(i) {} 

    using A::getSomeval; /* 
    ^^^^^^^^^^^^^^^^^^^^ */ 
}; 


int main() { 
    B b(42); 
    std::cout << b.getSomeval() << std::endl; 
} 

你可以公共繼承結構:

class B : public A { 
public: 
    B(int i) : A(i) {} 
}; 

B b(42); 
b.getSomeval(); 

或者使AB一個公共數據成員:

class B { 
public: 
    B(int i) : a(i) {} 
    A a; 
}; 

B b(42); 
b.a.getSomeval(); 

但是這種方法突破封裝。

大多數IDE將自動構建getter和setter函數爲你 - 你不一定需要手工把它們寫出來。

+1

作爲替代公有繼承一個可以使用私有繼承和利用使吸氣公衆'市民:''使用A :: getSomeval;'。 – HolyBlackCat

+0

我不知道這是一件事。謝謝! –