Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个抽象类,bass类将从中派生c++; 我必须用C++中的一个派生类来生成基类。最后,我需要证明两种方法void Read和void Show之间的多态性_C++_Class_Oop - Fatal编程技术网

创建一个抽象类,bass类将从中派生c++; 我必须用C++中的一个派生类来生成基类。最后,我需要证明两种方法void Read和void Show之间的多态性

创建一个抽象类,bass类将从中派生c++; 我必须用C++中的一个派生类来生成基类。最后,我需要证明两种方法void Read和void Show之间的多态性,c++,class,oop,C++,Class,Oop,在我这样做之后,我必须创建一个抽象类对象,基类将从中派生。这个类将只包含读取和显示的纯虚拟方法 我不认为我完全理解这一点。因此,我创建了一个抽象类对象,在其中我将这两个方法放在“=0”的位置,以使它们保持纯净。但这意味着我还必须编辑基类,使其从类对象派生?比如,在: class Base { } 之后 有人能让我明白吗?你说得对。在Base类中,可以将方法virtual标记为多态的。如果函数是“纯虚拟的”,在基类中没有实现,并且在任何具体的派生类中都是必需的,那么可以将它们设置为=0 cla

在我这样做之后,我必须创建一个抽象类对象,基类将从中派生。这个类将只包含读取和显示的纯虚拟方法

我不认为我完全理解这一点。因此,我创建了一个抽象类对象,在其中我将这两个方法放在“=0”的位置,以使它们保持纯净。但这意味着我还必须编辑基类,使其从类对象派生?比如,在:

class Base {

}
之后


有人能让我明白吗?

你说得对。在
Base
类中,可以将方法
virtual
标记为多态的。如果函数是“纯虚拟的”,在基类中没有实现,并且在任何具体的派生类中都是必需的,那么可以将它们设置为
=0

class Base
{
public:
    virtual void Read() = 0;
    virtual void Show() = 0;
};
然后,对于派生类,语法是反向的。请注意,
override
关键字表示您正在从基类重写虚拟方法。此关键字强制函数签名与基类签名匹配

class Object : public Base
{
public:
    void Read() override;   // implement this
    void Show() override;   // implement this
};
用法可能如下所示。请注意,您实例化了一个
对象
,但带有指向
基*
的指针。由于多态性,将调用派生实现

int main()
{
    Object obj;
    Base* p = &obj;
    p->Read();  // due to polymorphism will call Object::Read
    p->Show();  // due to polymorphism will call Object::Show
}
int main()
{
    Object obj;
    Base* p = &obj;
    p->Read();  // due to polymorphism will call Object::Read
    p->Show();  // due to polymorphism will call Object::Show
}