#include <iostream>
using namespace std;
class Base {
public:
void fun() { cout<<"Base::fun"<<endl; }//这个前面加VIRTUAL
};
class Derived : public Base {
public:
void fun() {
cout<<"Derived::fun"<<endl;
}
};
int main() {
Derived d;
d.fun();
return 0;
}
动态联编规定,只能通过指向基类的指针或基类对象的引用来调用虚函数,其格式:
1、指向基类的指针变量名->虚函数名(实参表)
2、基类对象的引用名. 虚函数名(实参表)
(以上内容摘自百度百科)
主函数如下
Base *p = new Derived;为什么这个程序不用虚函数也能达到预期效果然而有些程序就必须要加VIRTUAL关键字才能达到预期效果呢?
追答这不是预期效果,因为只有一个派生类故而无法体现。如果Base有很多个派生类的话,你调用派生类的fun函数就必须用指定派生类的对象去调用。如果你用虚函数的话,通过基类的指针就行了
这个C++程序为什么加VIRTUAL和不加VIRTUAL的运行结果是一样的
动态联编规定,只能通过指向基类的指针或基类对象的引用来调用虚函数,其格式:1、指向基类的指针变量名->虚函数名(实参表)2、基类对象的引用名. 虚函数名(实参表)(以上内容摘自百度百科)主函数如下 Base *p = new Derived; p->fun(); return 0;
C++ MFC 为什么BOOL InitInstance();之前要加virtual?不加会怎么样?
首先,这是两个不同的概念:①MFC的InitInstance设计成了虚函数,因为框架内部使用的是基类调用InitInstance,要调用派生类的InitInstance,所以需要InitInstance为虚函数,如果不为虚函数,那么派生类的初始化将不会被执行。②C++语法上的虚函数,基类声明了virtual,派生类无论声明virtual,同名同参函数都会是...
C++中virtual和非virtual版本对在派生类重写函数时候的有什么区别
非virtual版本 是重载, 重载只是作用域不一样
c++ virtual有什么作用
virtual主要是为了以后能实现它。主要是为了继承。如果函数加virtual,而函数没写实现,那么这个类不能创建实体,必须要子类里面实现这个函数才能创建子类。你可以搜索下虚函数了解下。
C++中用virtual和不用virtual的区别
。。。虚函数和覆盖有啥关系么?!父类定义一个函数接口,自己不用实现,由不同的子类去根据自身的情况实现相类似的功能而已。
c++重写为什么必须基类函数必须有virtual关键字
1. 必须有2. 因为在C++中,当一个派生类重写(覆盖)了基类的成员函数时,如果基类函数没有被声明为虚函数,那么在使用基类指针或引用调用该函数时,实际执行的是基类函数而不是派生类函数。这会导致无法实现多态性,违背了面向对象的设计原则。3. 如果基类函数被声明为虚函数,那么在使用基类指针或...
为什么需要override关键字求解
但就这样一来程序运行结果不正确了,经过仔细的跟踪,我才发现原来这个函数在基类中就被声明为virtual,子类中这个版本实际上是个重载版本,而我加上const后导致它的签名和基类中的版本不一样了,从而编译器不再认为它重载了基类中的虚函数,而是一个全新的函数了。对此编译器不能给出任何有用的信息,...
C++ Virtual详解
Virtual是C++ OO(面向对象机制)机制中很重要的一个关键字。虚函数就是因为成员函数加了关键字virtual,可见它的重要性。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类...
C++使用虚函数的时候,子类也要使用virtual关键字吗
c++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。因此,在子类重新声明该虚函数时,可以加,也可以不加,但习惯上每一层声明函数时都加virtual,使程序更加清晰。
C++中virtual关键字的用法
虚拟函数在C++中扮演着核心角色,特别是在面向对象编程的上下文中。当一个类包含有被`virtual`关键字标记的函数时,表示该函数是一个虚函数,其行为受到多态性的影响。多态性是允许函数在不同的对象类型上表现出不同行为的能力。1、虚函数的应用与区别于重载 在分析虚函数时,首先需要明确它与函数重载的...