C ++声明一个继承的构造函数?
Posted
技术标签:
【中文标题】C ++声明一个继承的构造函数?【英文标题】:C++ Declaring an inherited constructor? 【发布时间】:2020-05-12 04:41:48 【问题描述】:我在为继承另一个类属性的类定义构造函数时遇到困难
class Transportation
public:
int ID;
string company;
string vehicleOperator;
Transportation(int,string,string)
;
class SeaTransport: public Transportation
public:
int portNumber;
SeaTransport(int)::Transportation(int,string,string)
;
我在第 18 行遇到问题 (SeaTransport(int)::Transportation(int,string,string)
)。
我收到的错误发生在我声明 Transportation
的桥上。
从代码中可以看出,Transportation
类是主体类,SeaTransport
类继承了Transportation
的属性。
这个错误发生在 int 处
typedef std::__cxx11::basic_string std::string 不允许使用类型名称这个最终错误发生在两个字符串变量上。
【问题讨论】:
您使用的语法没有多大意义。您只需要在派生类中声明一个构造函数,并且在定义中您需要确保调用基类构造函数,您还需要为函数调用提供实际值:SeaTransport(int input) : Transportation(input,"","")
在函数声明的情况下,单独提供参数的类型就足够了。但是在定义函数时,您需要提供将存储数据的变量。
FWIW(虽然可能不严格相关):ret Class::method(..)..
风格的成员定义需要在类声明之外;并且通常在非标题 .cc 文件中。对于内联成员定义,删除 Class::
位。这也适用于构造函数。
【参考方案1】:
您似乎将范围界定和构造函数初始化列表混合在一起。
双冒号运算符::
用于范围,而后跟单冒号和初始化列表的构造函数是初始化列表。
您必须声明SeaTransport
构造函数以获取所有参数,包括父类的参数(假设您要将它们传递给基构造函数):
SeaTransport(int port, int id, string company, string operator);
然后在构造函数的定义(实现)中“调用”构造函数初始化列表中的父构造函数:
SeaTransport(int port, int id, string company, string oper)
: Transport(id, company, oper), // "Call" the parent class constructor
portNumber(port) // Initialize the own members
【讨论】:
您不必在派生类中获取任何参数,您必须向基类提供构造函数的所有参数。例如,您可以使用Transport(0,"","")
调用它【参考方案2】:
正如 Some Programmer Dude 先生所说,您的代码中存在 Scope 问题, 我将尝试回答您的第二个问题,即如何在构造函数中添加特征变量。
与您对 port
属性所做的相同。
您可以在所有属性之前将 boatNumber
定义为 int boadNumber = 0
然后,您将重载您的
boatNumber(num)
在初始化运算符之后和 int num
在初始化运算符之前的构造函数。
class Transportation
public:
int ID;
string company;
string vehicleOperator;
Transportation(int,string,string)
~Transportation()
;
class SeaTransport: public Transportation
public:
int portNumber;
int boatNumber;
SeaTransport(int num, int port, int id, string company, string oper)
:Transportation(id, company, oper), boatNumber(num),portNumber(port)
~SeaTransport()
;
但是,如果你想得到更具体的东西,你可以创建另一个派生自 SeaTransport
的类
然后,如果需要,您将定义 boat
的编号和更多其他详细信息。
我会给你画一个例子:
class Boat: public SeaTransport
public:
int boatNumber;
Boat(int bNum,int num, int port, int id, string company, string oper):
SeaTransport( num, port, id, company, oper),boatNumber(bNum)
~Boat()
;
【讨论】:
以上是关于C ++声明一个继承的构造函数?的主要内容,如果未能解决你的问题,请参考以下文章