# 【C++基础之十一】虚函数的用法

## 1.典型的虚函数用法

class A
{
public:
virtual void f(){cout<<"A::f()";}//虚函数
void g(){cout<<"A::g()";}//普通函数
};

class B :public A{
public:
virtual void f(){cout<<"B::f()";}
void g(){cout<<"B::g()";}
};

class C :public A{
public:
virtual void f(){cout<<"C::f()";}
void g(){cout<<"C::g()";}
};

int _tmain(int argc, _TCHAR* argv[])
{
A* pa=new B;//pa是指针喔
pa->f(); // 调用B::f()
pa->g(); // 调用A::g()
delete pa;

pa=new C;
pa->f(); // 调用C::f()
pa->g(); // 调用A::g()
delete pa;

pa=NULL;
return 0;
}

## 2.虚函数的默认继承

class A
{
public:
virtual void f(){cout<<"A::f()";}
};

class B :public A{
public:
void f(){cout<<"B::f()";}//不加virtual了
};

class C :public B{
public:
void f(){cout<<"C::f()";}//也不加virtual了
};

int _tmain(int argc, _TCHAR* argv[])
{
A* pa=new B;
pa->f(); // 调用B:f()
delete pa;

pa=new C;
pa->f(); // 调用C:f()
delete pa;

pa=NULL;
return 0;
}

## 3.纯虚函数

class A
{
public:
virtual void f()=0;//纯虚函数，导致该类为抽象类
};

class B :public A{
public:
virtual void f(){cout<<"B::f()";}
};

int _tmain(int argc, _TCHAR* argv[])
{
//A* pa=new A;//出错，不能实例化抽象类
A* pa=new B;
pa->f();//调用B::f()
delete pa;

pa=NULL;
return 0;
}

## 4.虚函数的调用模型

class A
{
private:
virtual void f(){cout<<"A::f()"<<endl;}
void g(){cout<<"A::g()"<<endl;}
public:
void h(){f();g();}
};

class B :public A{
private:
virtual void f(){cout<<"B::f()"<<endl;}
void g(){cout<<"B::g()"<<endl;}
};

int _tmain(int argc, _TCHAR* argv[])
{
B b;
b.h();//调用父类的h(),分别再调用f()和g()。f()为虚函数调用子类B::f(),g()为普通函数调用父类A::g()。

return 0;
}

## 5.虚析构函数

class A
{
public:
A(){p_a=new char[1];cout<<"new 1"<<endl;}
virtual ~A(){delete[] p_a;cout<<"delete 1"<<endl;}//正常
//~A(){delete[] p_a;cout<<"delete 1"<<endl;}//异常，内存泄漏，~B()并没有被执行到
private:
char* p_a;
};

class B :public A{
public:
B(){p_b=new char[2];cout<<"new 2"<<endl;}
~B(){delete[] p_b;cout<<"delete 2"<<endl;}//能不能正确执行~B()成了关键
private:
char* p_b;
};

int _tmain(int argc, _TCHAR* argv[])
{
A* pa=new B;
delete pa;

return 0;
}

## C++虚函数经典例子

1， #include "stdio.h" #include using namespace std; class A { public: virtual void...
• lskyne
• 2013年09月16日 14:53
• 2397

## C++中虚函数的用法详细讲解

• zhuaimiao1
• 2015年10月15日 22:43
• 1738

## c++虚函数的使用方法

• tian_123456789
• 2016年05月08日 13:04
• 9194

## C++学习笔记之多态（虚函数）

• ljp1919
• 2015年10月03日 15:16
• 968

## sdut 2088 数据结构实验之栈与队列十一：refresh的停车场

• sxy201658506207
• 2017年10月14日 21:00
• 652

## 【c++基础】虚函数的使用以及和成员函数的区别

• XiaoHeiBlack
• 2016年11月01日 14:11
• 919

## 析构函数和虚函数的用法和作用

• yuwei19840916
• 2008年11月21日 11:46
• 2935

## 数据结构与算法(C++版)：表、栈和队列

• u013271326
• 2017年06月06日 11:37
• 243

## C++虚函数的定义与意义

• u011392772
• 2015年01月30日 09:55
• 1685

## C++虚函数简单的例子

#include #include using namespace std; class A { public: A(){}; virtual void Fun() { cou...
• taoerit
• 2014年08月26日 12:26
• 807

举报原因： 您举报文章：【C++基础之十一】虚函数的用法 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)