val*_*lmo 13 c++ class base abstract
只是想要一些澄清.抽象基类是否应该没有私有成员?例如
class abc{
public:
virtual void foo()=0;
private:
int myInt;
}
Run Code Online (Sandbox Code Playgroud)
你永远不能访问myInt,因为你不能创建一个abc的实例,它不会在派生类中,因为它是私有的.是否有任何情况下你会在抽象基类中使用私有成员,或者这只是错误的?
Dav*_*eas 15
在C++中,您可以拥有一个具有非纯虚方法的抽象类.在这种情况下,根据设计,拥有私人会员是有意义的:
class base {
std::string name;
public:
base( std::string const & n ) : name(n) {}
std::string const & getName() const { return name; }
virtual void foo() = 0;
};
Run Code Online (Sandbox Code Playgroud)
该代码确保从base派生的每个对象都有一个名称,该名称在构造期间设置,并且在对象的生命周期内永远不会更改.
编辑:在Charles Bailey在他的回答中提醒我之后完成
您还可以定义纯虚函数,在这种情况下,私有属性也可以有意义:
// with the above definition of base
void base::foo() {
std::cout << "My name is " << name << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15144 次 |
| 最近记录: |