只是想澄清一下。 抽象基类不应该有私有(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/