C++ 如何使用基类的接口?

C++ 如何使用基类的接口?,c++,inheritance,polymorphism,C++,Inheritance,Polymorphism,如果我在基类中定义了一个接口,并且通过派生类调用该接口,那么我发现使用该基类接口的唯一方法就是在派生类中使用“using”。我不确定这是否是一个好的做法。下面是一个示例程序 #include <memory> #include <iostream> using namespace std; template <class T> class B { public: void outB() { cout << "dim from B is "

如果我在基类中定义了一个接口,并且通过派生类调用该接口,那么我发现使用该基类接口的唯一方法就是在派生类中使用“
using
”。我不确定这是否是一个好的做法。下面是一个示例程序

#include <memory>
#include <iostream>

using namespace std;

template <class T>
class B 
{
public:
  void outB() { cout << "dim from B is " << dim_ << endl ; }
  B(int dim) : dim_(dim) {}
  ~B() {}
protected:
  int dim_;
};

template <class T>
class A : B<T>
{
public:
  using B<T>::dim_;
  using B<T>::outB;
  void outA() { cout << "dim from A is " << dim_ << endl ; }
  A(int dim) : B<T>(dim) {}
  ~A() {}
private:
};


int main(int argc, const char *argv[])
{
  shared_ptr<A<double> > ap(new A<double>(2));
  ap->outA();
  ap->outB();
  return 0;
}
#包括
#包括
使用名称空间std;
模板
B类
{
公众:

void outB(){cout只有在基类是模板的情况下才需要使用
。因此,您可以检查是否需要基类作为模板。但是,如果您没有绕过它,您只需要接受它


关于虚拟函数调用:性能影响通常被高估。我建议实际测量影响,然后看看是否需要执行某些操作。

为什么不声明
类别A:public B
,在这种情况下,您将不需要使用
使用
?现在这对于基类中的成员函数是现成的。T若要访问基类成员变量,您需要执行您正在执行的操作,或者通过显式调用
this
指针来访问它们,即
this->dim
而不仅仅是
dim

早期优化…您确定不能使用虚拟方法吗?很少的指针间接定向可以避免您引入难以识别的错误nd,它们将使您的代码更易于阅读。您真的确定吗?*这是两个名称不同的函数,您无论如何都不会在派生类中使用基类的函数。@C-xC-t我不确定如何表达标题。但我的意思是从main调用outB。既然ap指针是类型A,我难道不能访问类B的接口吗从阿德里亚诺的“主”,我仍然学习C++,我跳过了虚拟函数的经验。我用现代C++和Boost作为指导。到目前为止,从我听到的,可以避免虚拟函数;有时使用CRTP。所以我知道它们是什么,CNA读取它们,但我尝试有一个AVO的样式。对他们进行识别。非常同意,通过
virtuals
造成的性能损失应该是您最不应该担心的事情。谢谢,我很迟钝。我需要配置snipmate或类似的东西。对于这个愚蠢的问题,我很抱歉。感谢所有人的帮助和其他信息。