C ++中的向上,向下转换和隐藏方法[关闭]

问题描述 投票:-6回答:1

我正在编写一个需要创建复杂对象(D)的C ++库,但是向我的库用户返回一个指向简化对象(B)的指针(隐藏复杂对象的许多方法)。我决定通过返回一个指向简化基类(B)的指针,并将我的所有复杂功能添加到派生类(D)来实现它,如下所示:

class B {
  virtual void simple() = 0;
}

class D : public B {
  void simple() { cout << "visible simple stuff" ; }
  void complex() { cout << "invisible complex stuff" ; }
}

在内部我创建了我的对象D,但是我返回一个向上指针,如下所示:

D Derived;
B *Bptr = &Derived;
return Bptr;
  1. 这是否是隐藏用户功能的正确方法,同时使库中的所有附加功能可见?
  2. 是否为D类隐藏.h文件是防止我的库用户访问D方法的唯一方法? (向下转换回D类)我将把库作为开源发布,因此库的用户可以访问D类定义。
c++ pure-virtual downcast upcasting
1个回答
0
投票

关于问题#1:是的,如果您提供工厂方法以及“简单”界面:

class B {
public:
    static B * create();
    virtual void simple() = 0;
};

inD Vs实现文件(c ++):

B *B::create()
{
    return new D(); //or whatever 'hidden' implementation 
}

关于你的#2:隐藏功能首先意味着简化,旨在帮助图书馆用户,而不是惩罚性约束。因此,完全隐藏D类并让(好)用户满意。

© www.soinside.com 2019 - 2024. All rights reserved.