摘要类可以在C 11中具有构造函数和私人成员
Can Abstract class have constructor and private member in C++11
被提出类似的问题,但他们没有回答我的问题。我正在尝试创建抽象类(具有一个纯虚拟函数(。但是编译器给出了此错误:
src/library.cpp:11:24:错误:无效铸造到抽象类类型 ‘MGC ::形状’ 形状(长度,名称(;
我具有抽象类的构造函数,因为它具有成员变量和成员函数。我不知道为什么这个错误来了。
这是我的标题文件librar.h
class Shapes
{
public:
Shapes(double len = 0.0, std::string name = "");
virtual void printClass();
virtual double area() = 0;
protected:
double len_, width_;
std::string name_;
};
class Triangle : public Shapes
{
public:
Triangle(double lene =0, std::string namee= "" );
void printClass();
double area();
};
这是我的实现文件库
mgc::Shapes::Shapes(double length, std::string name)
: len_(length),
width_(length),
name_(name)
{}
mgc::Triangle::Triangle(double length, std::string name)
{
Shapes(length, name);
}
void mgc::Shapes::printClass()
{
std::cout<<"Base class is called"<<std::endl;
}
void mgc::Triangle::printClass()
{
std::cout<<"Triangle class is called"<<std::endl;
}
double mgc::Triangle::area()
{
return(width_*len_);
}
Triangle
构造函数应在初始化列表中调用基类构造函数:
mgc::Triangle::Triangle(double length, std::string name)
: Shapes(length, name)
{
}
这是调用基本构造函数的错误方法:
mgc::Triangle::Triangle(double length, std::string name)
{
Shapes(length, name);
}
您所做的只是尝试创建Shapes
&MDASH类型的无名临时性;这是不可能的,因为Shapes
是纯虚拟的("抽象"(。
当您想初始化基础和成员时,请使用成员初始列表:
mgc::Triangle::Triangle(double length, std::string name)
: Shapes(length, name)
{}
这应该在您的书中解释。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 继承:构造函数,初始化C++11中基类的类C数组成员
- C++-我可以创建另一个类的成员并在构造函数中使用它吗
- 如果基类包含双指针成员,则派生类的构造函数
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- constexpr构造函数需要常量成员函数时出现问题
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- std::ofstream 作为类成员删除复制构造函数?
- c++构造函数成员初始化:传递参数
- C++初始化类实例时隐式调用类成员的构造函数
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- 在构造函数中输入对象时C++类成员作用域
- 解释了构造函数成员初始化列表
- 构造函数成员初始值设定项跨成员列出,安全吗?
- C 构造函数成员分配优化
- 类内/构造函数成员初始化
- 在构造函数成员初始化之前调用成员函数的语法
- 非构造函数成员函数中的显式字符串行为