4 虚函数用法

分析下列程序:

#include<iostream>
#include<string.h>
using namespace std;
class Base{
    public:
        Base() {
            echo();
        }
        virtual void echo() {
            printf("Base");
        }
};
class Derived : public Base {
    public:
        Derived() {
            echo();
        }
        virtual void echo() {
            printf("Derived");
        }
};

int main() {
    Base *base=new Derived();
    base->echo();
    return 0;
}

程序输出:  Base 、Derived、Derived

分析:

首先声明Base类型的指针指向实际类型为Derived的对象,先调用基类构造函数,再调用派生类构造函数。输出Base, Derived.

base->echo(); 指针是base类型,但是因为有关键词 virtual,所以不是隐藏而是重写.调用的是Derived的方法,输出Derived。

1.重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。

2.隐藏:隐藏是指派生类的函数屏蔽了与其同名的基类函数。注意只要同名函数,不管参数列表是否相同,基类函数都会被隐藏。

3.重写:重写翻译自override,也翻译成覆盖(更好一点),是指派生类中存在重新定义的函数。其函数名,参数列表,返回值类型,所有都必须同基类中被重写的函数一致。只有函数体不同(花括号内),派生类调用时会调用派生类的重写函数,不会调用被重写函数。重写的基类中被重写的函数必须有virtual修饰。

注意:父类构造函数里不能调用虚函数,因为虚函数是运行时调用确定的,父类对象会调用子类函数,这样会出问题。

动态绑定只有在通过指针或引用调用虚函数时才会发生。

虚函数在构造函数里面与普通函数一样,失去了多态性,但是一般在构造函数里面不调用虚函数。

时间: 2025-01-05 23:47:19

4 虚函数用法的相关文章

C++虚函数用法举例

program1:class A{ public: void print(){ cout<<”This is A”<<endl;} }; class B:public A{ public: void print(){ cout<<”This is B”<<endl;} }; int main(){ A a; B b; a.print(); b.print(); } 输出: This is AThis is B program2: int main(){ //

C++中virtual(虚函数)的用法

转载:http://blog.csdn.net/foreverhuylee/article/details/34107615 在面向对象的C++语言中,虚函数(virtual function)是一个非常重要的概念. 什么是虚函数: 虚函数是指一个类中你希望重载的成员函数 ,当你用一个  基类指针或引用   指向一个继承类对象的时候,调用一个虚函数时, 实际调用的是继承类的版本. --摘自MSDN                                                 

C++ 纯虚函数接口,标准 C 导出 DLL 函数的用法

CMakeLists.txt project(virtual) # 创建工程 virtual add_library(virtual SHARED virtual.cpp) # 创建动态连接库 libvirtual.dll add_executable(main main.cpp) # 创建运行程序 main.exe target_link_libraries(main virtual) # 让 main.exe 连接 libvirtual.dll virtual.h #pragma once

c++ 虚函数详解

下面是对C++的虚函数的理解. 一,定义 简单地说,那些被virtual关键字修饰的成员函数,就是虚函数.虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离:用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略.下面来看一段简单的代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 classA { publi

关于虚函数的那些事儿

一.虚函数定义 在某基类中声明为virtual 并在一个或多个派生类中被重新定义的成员函数,用法格式为: virtual 函数返回类型 函数名(参数表) {函数体}; 虚函数是C++语言实现运行时多态的唯一手段,通过指向派生类的基类指针或引用,访问派生类中同名覆盖成员函数. 举个例子: class A{ public:virtual void p() { cout << "A" << endl; } }; class B : public A { public:

c++中的虚函数

多态是指使用相同的函数名来访问函数不同的实现方法,即“一种接口,多种方法”,用相同的形式访问一组通用的运算,每个运算可能对应的行为不同. C++支持编译时多态和运行时多态,运算符重载和函数重载就是编译时多态,而派生类和虚函数实现运行时多态. 1.运行时多态: class A { public: virtual  void play() { cout<< "A:play"<<endl; } }: class B : public class A { public:

转载:C++多态性 &amp; C++纯虚函数

C++编程语言是一款应用广泛,支持多种程序设计的计算机编程语言.我们今天就会为大家详细介绍其中C++多态性的一些基本知识,以方便大家在学习过程中对此能够有一个充分的掌握. 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念.多态(polymorphism),字面意思多种形状. C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写.(这里 我觉得要补充,重写的话可

虚函数的使用

1. 如果你在基类中将某个函数声明为纯虚函数,那么该类是不可实例化的:你必须在它的某个子类中给出该虚函数的实际定义. 2. 如果你在基类中将某个函数声明为非纯的虚函数,那么必须提供该函数的定义,否则编译器会报错,因为在多态情形下,编译器无法判断你是否会用到该函数,使用的是基类函数还是继承类函数. 综上,虚函数的用法必居其下之一: 1. 在基类中将某个函数声明为纯虚函数,该类不可实例化,在子类中有该函数定义: 2. 在基类中将某个函数声明为非纯的虚函数,且提供该函数定义. 以下是非虚的函数可以做到

读书笔记 effective c++ Item 35 考虑虚函数的替代者

1. 突破思维——不要将思维限定在面向对象方法上 你正在制作一个视频游戏,你正在为游戏中的人物设计一个类继承体系.你的游戏处在农耕时代,人类很容易受伤或者说健康度降低.因此你决定为其提供一个成员函数,healthValue,返回一个整型值来表明一个人物的健康度.因为不同的人物会用不同的方式来计算健康度,将healthValue声明为虚函数看上去是一个比较明显的设计方式: 1 class GameCharacter { 2 public: 3 4 virtual int healthValue()