我有一个简单的Object-Components
设计。类似的东西:
class Object1 : public Object
{
Component1 _comp1;
Component2 _comp2;
...
ComponentN _compN;
};
是否可以在public:
中使用Objects1
方法公开ComponentK
方法,而无需在Object1
中创建调用内部ComponentK
方法的方法?< / p>
我需要一种简单的方法来执行此操作,因为每次我想要公开一些ComponentK
方法时编写函数都非常烦人。
答案 0 :(得分:11)
不直接,不。您可以使用私有继承从组件继承而不是聚合它们(请注意,私有继承不表示是-a ),然后通过using
发布它们的一些成员函数。像这样:
class Object1 : public Object, private Component1, private Component2, ..., private ComponentN
{
public:
using Component1::function1();
using Component1::function2();
...
using ComponentN::functionM();
};
我并不是说这是最好的方法,但它是 方式。
答案 1 :(得分:0)
您可以返回一个指向成员的指针;指针将归调用者所有,并且可以删除而不会影响类成员:
// Example program
#include <iostream>
#include <string>
class Member {
private:
int size = 10;
public:
int getSize() {
return size;
};
};
class MemberContainer {
private:
Member member;
public:
Member * getMember () {
return &member;
};
};
int main()
{
MemberContainer memberContainer;
Member * memberPtr = memberContainer.getMember();
std::cout << memberPtr->getSize() << std::endl;
memberPtr = nullptr;
delete memberPtr;
Member * anotherMemberPtr = memberContainer.getMember();
std::cout << anotherMemberPtr->getSize() << std::endl;
}
这将输出:
10
10