虚函数必须是基类的非静态成员函数,其访问权限可以是 private、protected或public,为了将接口和多态分开,虚函数都应该是 private 的。STL库就遵循这个。
在基类的类定义中定义虚函数的一般形式:
virtual 函数返回值类型 虚函数名(形参表) { 函数体 }
class Parent
{
public:
virtual void func_1() {cout<<"This is parent.";}
void func_2 {cout<<"This is parent.";}
};
class Child
{
public:
virtual void func_1 {cout<<"This is child.";}//这里可不写virtual关键字
void func_2 {cout<<"This is child.";}
};
Parent *p = new Child;
p->func_1();
p->func_2();
这里用父类的指针去指向一个子类的对象,p->func_1()会输出This is child。但是对于普通函数func_2(),就没有这种关系,因此p->func_2()还是输出This is parent,这就是 virtual 的作用。
纯虚函数是一种特殊的虚函数,基类只定义了函数体,没有实现过程。它的一般格式如下:
class <类名>
{
virtual <类型><函数名>(<参数表>)=0;
…
};
虚函数与纯虚函数区别
1、带纯虚函数的类称为虚基类,这种基类不能直接生成对象,而只有被继承并重写其虚函数后才能使用,这样的类叫抽象类。
2、虚函数本身有默认实现,它的作用是为了能让其在它的子类里可以被重载,以达到多态,而纯虚函数只是一个接口,仅仅是个函数声明,它必须在子类里实现。
3、虚函数在子类里也可以不重载,纯虚函数必须在子类里实现。有纯虚函数的类 不能被实例化。
在基类的类定义中定义虚函数的一般形式:
virtual 函数返回值类型 虚函数名(形参表) { 函数体 }
class Parent
{
public:
virtual void func_1() {cout<<"This is parent.";}
void func_2 {cout<<"This is parent.";}
};
class Child
{
public:
virtual void func_1 {cout<<"This is child.";}//这里可不写virtual关键字
void func_2 {cout<<"This is child.";}
};
Parent *p = new Child;
p->func_1();
p->func_2();
这里用父类的指针去指向一个子类的对象,p->func_1()会输出This is child。但是对于普通函数func_2(),就没有这种关系,因此p->func_2()还是输出This is parent,这就是 virtual 的作用。
纯虚函数是一种特殊的虚函数,基类只定义了函数体,没有实现过程。它的一般格式如下:
class <类名>
{
virtual <类型><函数名>(<参数表>)=0;
…
};
虚函数与纯虚函数区别
1、带纯虚函数的类称为虚基类,这种基类不能直接生成对象,而只有被继承并重写其虚函数后才能使用,这样的类叫抽象类。
2、虚函数本身有默认实现,它的作用是为了能让其在它的子类里可以被重载,以达到多态,而纯虚函数只是一个接口,仅仅是个函数声明,它必须在子类里实现。
3、虚函数在子类里也可以不重载,纯虚函数必须在子类里实现。有纯虚函数的类 不能被实例化。
相关推荐
c++普通函数,虚函数,纯虚函数的区别
1. 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有...
虚函数和纯虚函数的理解区别,最重要的是知道虚函数和纯虚函数的用法
构造函数不能声明为虚函数,析构函数可以声明为虚函数。
学习 C++ 的同志不知道有没有和我一样遇到过这样的困惑:C++中的虚函数到底怎么实现的?在各种继承关系中,虚函数表的结构到底是什么样的?曾经我是很想当然,可是后来在使用ATL的过程中,我发现并不是我想的那样。...
高质量的C++多态讲解,详细讲解虚函数,虚函数表,虚函数继承,虚函数继承下的内存分配等
C++中重载与重写函数区别及虚函数!
虚函数表中虚函数的分布情况;其中包括发生继承的情况下虚函数表中虚函数的分布情况;
c++虚函数.C++中的虚函数的作用主要是实现了多态的机制。
虚函数表 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容...
C++虚函数表的测试代码,用于学习C++虚函数的调用关系。
C++实验六 多态性和虚函数的应用 课程 实验报告 作业参考的良品!
虚函数和动态联编的PP他,觉得有用的可以下载,勿拍砖
虚函数与抽象函数的区别,网上收集!版权归原作者所有!
C++虚函数及虚函数表解析,内容详细,分析清晰,推荐给大家。
彻底搞清楚继承是个什么东西 彻底搞清楚虚函数和虚函数表是个什么东西
c++ 虚基类和虚函数+代码.有一个案例,里面有源代码。看完就懂什么叫c++ 虚基类和虚函数了
2、熟练掌握虚函数的作用及其使用方法。 3、掌握静态关联和动态关联的概念和用法。 4、理解纯虚函数和抽象类的概念和用法。 (二)实验内容 1、定义一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行...
用C++简单编码实现虚函数,展现虚函数的用法,以及虚析函数的用法 和 判断类的大小(在类中有虚函数的时候,无虚函数的时候)
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际 子类的成员函数。