在C ++中公开成员变量方法

时间:2013-04-09 06:35:50

标签: c++ c++11

我有一个简单的Object-Components设计。类似的东西:

class Object1 : public Object
{
    Component1 _comp1;
    Component2 _comp2;
    ...
    ComponentN _compN;
};

是否可以在public:中使用Objects1方法公开ComponentK方法,而无需在Object1中创建调用内部ComponentK方法的方法?< / p>

我需要一种简单的方法来执行此操作,因为每次我想要公开一些ComponentK方法时编写函数都非常烦人。

2 个答案:

答案 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