hwd*_*ing 7 c++ virtual abstract-class derived-class pure-virtual
正如在C++ 编程语言中解释的那样:
virtual void push(char c) = 0;
virtual void pop() = 0;
Run Code Online (Sandbox Code Playgroud)
这个词virtual的意思是“以后可能会在这一个派生类中重新定义”
的=0语法说,一些类来源于栈必须定义的功能。
那么为什么=0需要符号呢?是不是说派生类一定要定义这个函数,也就是说没有的时候=0,一些派生类就没有强制定义这个方法?
我对此感到困惑,需要一些帮助。
你的想法是对的。
那么为什么需要=0符号呢?是不是意味着子类必须定义这个函数,也就是说没有=0的时候,有些子类不强制定义这个方法?
基本上你可以:
这不允许从实现该方法的类派生的任何类(通过 或public)protected更改该方法的行为。
virtual这允许(但不强制)从实现该方法的类派生的任何类(通过 或public)protected更改基类中该方法的行为。您甚至不必再调用原始基类方法,因此您可以根据需要进行重大更改。
pure virtual( virtual = 0)这强制从实现该方法的类(通过 或public)派生的任何类protected为此方法实现某种行为/主体。如果派生类不提供实现,那么该类本身将立即变成抽象类。这允许省略基类中方法的行为/主体,因此不允许直接实例化具有一个或多个纯虚方法(抽象类)的类。
那么为什么需要=0符号呢?
考虑以下:
struct foo
{
virtual void some() const { cout << "foo" << endl; }
};
struct bar : public foo
{
virtual void some() const { cout << "bar" << endl; }
};
struct baz : public foo
{
}
Run Code Online (Sandbox Code Playgroud)
假设您有一个foo *p指向某个对象的指针,并且您调用p->some().
如果p指向一个bar对象,它将打印"bar"。
如果p指向一个baz对象,它将打印"foo"。
在某些情况下,这可能不是您想要的。您可能想要指定任何派生类都需要重写它。就是=0这样做的。
| 归档时间: |
|
| 查看次数: |
2987 次 |
| 最近记录: |