# 【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++.doc

• 2011-07-15 12:38
• 52KB
• 下载

## C++精进篇（十一）之―虚函数和多态

C++虚函数与多态: 1.C++中的虚函数 C++中的虚函数的作用主要是实现了多态的机制。关于多态，简而言之就是用父类型别的指针指向其子类的实例，然后通过父类的指针调用实际子类的成员函数。这种技术可以...

## C++基础---虚函数

1. 虚函数 1.1 虚函数的定义 虚函数：就是在基类的成员函数前加关键字virtual(即被virtual关键字修饰的成员函数)，并在一个或多个派生类中被重新定义的成员函数； 虚函数：就是在编译...

## C++基础--------带默认参数的虚函数 静态类型和动态类型分析

// 字串查找.cpp : 定义控制台应用程序的入口点。   //   #include "stdafx.h"   #include    #incl...

## C++基础篇--虚函数原理

• ipmux
• 2015-04-03 17:14
• 542

## C++基础（五）虚函数、重载、覆盖、隐藏

1）覆盖与虚函数是一对兄弟，要求函数的返回值，函数名，参数严格一致，虚函数是覆盖加上virtual的情况； 2） 隐藏是覆盖的推广，覆盖是隐藏的特例，只要求函数名一样，其他不管，在继承体系中，子类的同...

举报原因： 您举报文章：深度学习：神经网络中的前向传播和反向传播算法推导 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)