2016-12-15 69 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

我不知道这是一件事。谢谢! –