Leg*_*las 1 c++ virtual-functions
C++中很少有概念,比如虚函数,从一开始就一直在玩我的脑袋.我已经阅读了一些虚函数的语法,但我永远无法理解 -
任何人都可以解释宣布以下函数的内容吗?
void MakeMeASandwich();
virtual void MakeMeASandwich();
virtual void MakeMeASandwich() = 0;
Run Code Online (Sandbox Code Playgroud)#include <iostream>
class A {
public:
void Y() { std::cout << "A" << std::endl; }
virtual void X() { std::cout << "A" << std::endl; }
};
class B : public A {
public:
void Y() { std::cout << "B" << std::endl; }
virtual void X() { std::cout << "B" << std::endl; }
};
int main() {
A a;
a.Y(); // "A"
a.X(); // "A"
B b;
b.Y(); // "B"
b.X(); // "B"
A* ap = &b;
ap->Y(); // "A"
ap->X(); // "B"
}
Run Code Online (Sandbox Code Playgroud)
如果你没有进行多态和派生,虚函数就不那么有趣了.如您所见,在第三种情况下,通过类型指针访问B的实例A*.对于非虚函数,这意味着调用的函数实际上是在A,而不是在B.使用表解析虚函数调用,因此运行时的代码确定跳转的位置.
对你的问题:
1)根据对象的实际类型,在运行时确定要调用哪个函数.
2)多态
3)不,如果不是这样,ap->X()就会打电话.A::X()virtual
4)很高兴:
void MakeMeASandwich(); 默认,没什么特别的.
virtual void MakeMeASandwich();虚函数,提供实现.派生类可以选择覆盖它.
virtuall void MakeMeASandwich() = 0;声明了虚函数,但未提供任何实现.包含此函数的类自动设置为abstract并且无法实例化.
| 归档时间: |
|
| 查看次数: |
6530 次 |
| 最近记录: |