1.首先:强调一个概念
定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。
定义一个函数为纯虚函数,才代表函数没有被实现。定义他是为了实现一个接口,起到一个规范的作用,规范继承这个。类的程序员必须实现这个函数。
2.关于实例化一个类:
有纯虚函数的类是不可能生成类对象的,如果没有纯虚函数则可以。比如:
class CA
{
public:
virtual void fun() = 0; // 说明fun函数为纯虚函数
virtual void fun1();
};
class CB
{
public:
virtual void fun();
virtual void fun1();
};
// CA,CB类的实现
...
void main()
{
CA a; // 不允许,因为类CA中有纯虚函数
CB b; // 可以,因为类CB中没有纯虚函数
...
}
3.虚函数在多态中间的使用:
多态一般就是通过指向基类的指针来实现的。
4.有一点你必须明白,就是用父类的指针在运行时刻来调用子类:
例如,有个函数是这样的:
void animal::fun1(animal *maybedog_maybehorse)
{
maybedog_maybehorse->born();
}
参数maybedog_maybehorse在编译时刻并不知道传进来的是dog类还是horse类,所以就把它设定为animal类,具体到运行时决定了才决定用那个函数。也就是说用父类指针通过虚函数来决定运行时刻到底是谁而指向谁的函数。
5.用虚函数
#include <iostream.h>
class animal
{
public:
animal();
~animal();
void fun1(animal *maybedog_maybehorse);
virtual void born();
};
void animal::fun1(animal *maybedog_maybehorse)
{
maybedog_maybehorse->born();
}
animal::animal() { }
animal::~animal() { }
void animal::born()
{
cout<< "animal";
}
///////////////////////horse
class horse:public animal
{
public:
horse();
~horse();
virtual void born();
};
horse::horse() { }
horse::~horse() { }
void horse::born()
{
cout<<"horse";
}
///////////////////////main
void main()
{
animal a;
horse b;
a.fun1(&b);
}
//output: horse
6.不用虚函数
#include <iostream.h>
class animal
{
public:
animal();
~animal();
void fun1(animal *maybedog_maybehorse);
void born();
};
void animal::fun1(animal *maybedog_maybehorse)
{
maybedog_maybehorse->born();
}
animal::animal() { }
animal::~animal() { }
void animal::born()
{
cout<< "animal";
}
////////////////////////horse
class horse:public animal
{
public:
horse();
~horse();
void born();
};
horse::horse() { }
horse::~horse() { }
void horse::born()
{
cout<<"horse";
}
////////////////////main
void main()
{
animal a;
horse b;
a.fun1(&b);
}
//output: animal
相关推荐
在C++编程语言中,虚函数(Virtual Functions)和纯虚函数(Pure Virtual Functions)是面向对象编程的重要特性,它们都是实现多态性的方式,但各自有着不同的应用场景和功能特点。下面将详细解释这两个概念以及它们...
c++普通函数,虚函数,纯虚函数的区别
在C++编程语言中,虚函数和纯虚函数是实现多态性的关键机制,但它们具有不同的特点和用途。首先,我们需要了解什么是虚函数。虚函数是基类中通过关键字virtual声明的成员函数,它允许派生类重新定义该函数,从而实现...
### C++中的虚函数与纯虚函数详解 #### 一、引言 在面向对象编程中,多态性是一项非常重要的特性,它允许程序通过基类指针或引用调用派生类的方法。C++中实现多态性的主要机制之一就是虚函数。虚函数和纯虚函数是...
在C++编程语言中,函数覆盖、虚函数和纯虚函数是面向对象编程中的关键概念,它们涉及到类的继承和多态性。本文将详细探讨这三个概念,以及它们之间的对比。 1. **函数覆盖(Function Overriding)** 函数覆盖发生...
### Java与C++在虚函数、纯虚函数上的区别详解 #### Java的抽象函数与C++的虚函数 在深入探讨两者之间的差异之前,我们先理解一下Java与C++各自如何处理多态性,尤其是通过虚函数和抽象函数实现。 **Java**中,...
在C++编程语言中,虚基类、虚函数与纯虚函数是面向对象编程中用于实现多态性的重要概念。本文将深入解析这三个概念,并通过示例代码来具体阐述其用法与作用。 ### 虚基类 虚基类(Virtual Base Class)是用来解决...
### C++ 中的继承、多态、虚函数与纯虚函数 #### 继承 **概念解析** 在面向对象编程语言如 C++ 中,继承是一种让一个类(派生类)能够继承另一个类(基类)特性的机制。这种机制不仅能够重用代码,还能在原有基础...
通过小的代码实例段来讲解虚函数和纯虚函数之间的关系、用法
虚函数和纯虚函数是C++面向对象编程中的核心概念,它们主要涉及到继承和多态性的实现。在C++中,虚函数(virtual function)允许我们通过基类指针或引用调用派生类中重定义的同名函数,从而实现动态绑定或运行时多态...
C++虚函数和纯虚函数的区别 C++ 中的虚函数和纯虚函数是两种不同的函数声明方式,用于实现多态(polymorphism)机制。 虚函数 虚函数声明如下:virtual ReturnType FunctionName(Parameter) ;虚函数必须实现,如果...
纯虚函数是一种特殊的虚函数,它没有具体的实现,必须由派生类提供具体实现。纯虚函数通过在声明时添加`= 0`来表示: ```cpp class A { public: virtual void foo() = 0; // 纯虚函数 }; class B : public A { ...
纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数! 虚函数 引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。 class Cman { public: virtual void Eat(){……}; void ...
纯虚函数(pure virtual function)是虚函数的一个特殊形式,它在基类中声明但不提供实现。纯虚函数通常用于定义抽象基类,这类类不能实例化,但可以被其他类继承。纯虚函数的存在要求派生类必须重写它,从而强制...
虚函数和纯虚函数是C++中面向对象编程的关键特性,它们使得类的继承和多态性成为可能。本文将详细解释这两种函数的概念、用法以及它们在C++中的重要性。 虚函数(Virtual Functions)的主要目的是实现多态性,即在...
1. 纯虚函数:纯虚函数是不提供具体实现的虚函数,用`=0`表示。如果一个类含有纯虚函数,那么这个类就是抽象类,不能实例化对象。 2. 抽象类:抽象类作为基类使用,用于定义接口。在C++中,抽象类不能被实例化,但...
多态性主要通过虚函数(Virtual Functions)来实现,而纯虚函数(Pure Virtual Functions)则进一步扩展了这种机制,为创建抽象基类和接口提供了可能。下面我们将深入探讨这两个概念以及它们在实际编程中的应用。 ...
在C++编程语言中,虚函数(Virtual Functions)和纯虚函数(Pure Virtual Functions)是面向对象编程中的重要概念,它们对于实现多态性(Polymorphism)起着关键作用。下面将详细解释这两个概念以及它们的区别。 1....