c++ 抽象基类私有(private)成员

标签 c++ class abstract base

只是想澄清一下。 抽象基类不应该有私有(private)成员吗?例如

class abc{
public:
  virtual void foo()=0;
private:
  int myInt;
}

您永远无法访问 myInt,因为您无法创建 abc 的实例,并且它不会在派生类中,因为它是私有(private)的。 有没有在抽象基类中使用私有(private)成员的情况,或者这是错误的?

最佳答案

在 C++ 中,您可以拥有一个包含非纯虚方法的抽象类。在这种情况下,根据设计,拥有私有(private)成员是有意义的:

class base {
   std::string name;
public:
   base( std::string const & n ) : name(n) {}
   std::string const & getName() const { return name; }

   virtual void foo() = 0;
};

该代码确保从 base 派生的每个对象都有一个名称,该名称在构造期间设置,并且在对象的生命周期内永远不会更改。

编辑:在 Charles Bailey 在他的 answer 中提醒我之后完成。

您还可以定义纯虚拟函数,在这种情况下,私有(private)属性也可能有意义:

// with the above definition of base
void base::foo() {
   std::cout << "My name is " << name << std::endl;
}

关于c++ 抽象基类私有(private)成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569115/

相关文章:

c++ - 如何为 _beginthreadex 提供 64 位线程标识符

Python:获取实例化类的名称?

C++成员函数和构造函数问题

c++ - 在UE4中,为什么要重写BeginPlay,为什么要在重写的BeginPlay中调用Super::BeginPlay?

c++ - 有没有一种使用 C++ 在 mac OS X 中打开一个(或多个)opengl 窗口的简单方法?

c++ - 单链表的根节点是否被视为列表的一部分?

c# - UML 类图 - 我们在这里包含像用户控件和 MainWindow 这样的部分类吗?

diagram - 代码的视觉/艺术表现

javascript - 基于 html 的网站中 PC 的真正唯一标识

c++ - 将 OpenSSL 链接到动态库中