我现在正在学习 C++,我有一个可能非常基本的问题。
如果我在 .h 文件中有以下内容:
class Top{
Top();
virtual ~Top() = 0;
}
class Bottom: public Top{
public:
Bottom(char core);
virtual ~Bottom();
public:
char getCore() const;
private:
char core;
}
Bottom 的实现会像下面这样吗?
Top::Top(): Top() {}
//Bottom
Bottom::Top(char core){
core = core;
}
char Bottom::getCore(){
return core;
}
或者
Top::Top(): Top() {}
//Bottom
Bottom::Bottom(char core){
core = core;
}
char Bottom::getCore(){
return core;
}
最佳答案
您的代码存在一些问题。
class Top{
Top();
virtual ~Top() = 0;
}
class
访问控制默认为 private
。这意味着此类具有私有(private)构造函数,因此无法构造,也无法构造子类。固定版本可能如下所示:
class Top {
protected:
Top();
virtual ~Top() = 0;
}
virtual
析构函数意味着您无法创建 Top
,但您仍然可以创建子类。
正如@Deduplicator 指出的那样,您仍然需要为 Top::~Top()
定义,因为子类的析构函数将调用它:
Top::~Top() {}
class Bottom
的声明看起来不错,尽管您不需要重复 public:
。
两个类定义都有一个小问题:你忘记了右大括号后的分号。
至于实现:
Top::Top(): Top() {}
第三个 Top
不正确。该语法用于将事物传递给父类(super class)的构造函数,或委托(delegate)给另一个构造函数(您没有)。 Top
不是它自己的父类(super class)。正确的代码很简单:
Top::Top() {}
继续……
Bottom::Bottom(char core){
core = core;
}
这有一个问题,因为参数core
隐藏了类成员core
。它们需要是不同的名称(尽管不要求类声明中的参数名称与方法定义中的参数名称匹配)。我通常通过在参数名称后面添加下划线来解决这个问题:
Bottom::Bottom(char core_) {
core = core_;
}
最后:
char Bottom::getCore(){
return core;
}
这是错误的,因为您将其声明为 const
方法,但此定义不是 const
。固定:
char Bottom::getCore() const {
return core;
}
顺便说一句,您可以拥有方法的const
和非const
版本。运行哪一个取决于 this
是否为 const
。
最后一件事:您忘记定义 Bottom::~Bottom()
。添加这个:
Bottom::~Bottom() {
}
我有此代码的固定版本,外加一些 token 测试代码,posted online.
关于c++ - C++ 中的基本继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23599196/