`
beckshanling
  • 浏览: 262811 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

c++中虚函数和多态性1

    博客分类:
  • C++
阅读更多

虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章 。没了继承,什么都没得谈。

下面是对C++的虚函数这玩意儿的理解。

什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始)

简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性 (Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。下面来看一段简 单的代码

class A{

public:

void print(){ cout<<”This is A”<<endl;}

};

class B:public A{

public:

void print(){ cout<<”This is B”<<endl;}

};

int main(){ //为了在以后便于区分,我这段main()代码叫做main1

A a;

B b;

a.print();

b.print();

}

通过class A和class B的print()这个接口,可以看出这两个class因个体的差异而采用了不同的策略,输出的结果也是我们预料中的,分别是This is A和This is B。但这是否真正做到了多态性呢?No,多态还有个关键之处就是一切用指向基类的指针或引用来操作对象。那现在就把main()处的代码改一改。

int main(){ //main2

A a;

B b;

A* p1=&a;

A* p2=&b;

p1->print();

p2->print();

}

运行一下看看结果,哟呵,蓦然回首,结果却是两个This is A。问题来了,p2明明指向的是class B的对象但却是调用的class A的print()函数,这不是我们所期望的结果,那么解决这个问题就需要用到虚函数

class A{

public:

virtual void print(){ cout<<”This is A”<<endl;} //现在成了虚函数了

};

class B:public A{

public:

void print(){ cout<<”This is B”<<endl;} //这里需要在前面加上关键字virtual吗?

};

毫无疑问,class A的成员函数print()已经成了虚函数,那么class B的print()成了虚函数了吗?回答是Yes,我们只需在把基类的成员函数设为virtual,其派生类的相应的函数也会自动变为虚函数。所 以,class B的print()也成了虚函数。那么对于在派生类的相应函数前是否需要用virtual关键字修饰,那就是你自己的问题了。

现在重新运行main2的代码,这样输出的结果就是This is A和This is B了。

现在来消化一下,我作个简单的总结,指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数

分享到:
评论

相关推荐

    C++实验六 多态性和虚函数的应用 课程 实验报告

    在C++编程语言中,多态性和虚函数是面向对象编程的重要特性,它们允许程序员创建灵活且可扩展的代码结构。本次实验旨在深入理解和熟练运用这两个概念。实验报告的标题和描述表明,这是一个关于C++实验,特别是针对多...

    c++多态性与虚函数练习题

    ### C++多态性与虚函数知识点解析 #### 一、多态性的概念 多态性是面向对象编程的一个...通过这些实验,你可以更深入地理解和掌握C++中的多态性、虚函数以及相关的高级特性。这些知识对于开发复杂的应用程序至关重要。

    C++实验之多态性和虚函数

    多态性和虚函数

    C++虚函数与多态性

    ### C++中的多态性和虚函数详解 #### 一、多态性概述 多态性是面向对象编程的一个核心特性,其本质在于“一个接口,多种实现方式”。它允许程序员编写更加灵活、易于扩展和维护的代码。在C++中,多态性主要通过虚...

    c++课件 多态性与虚函数

    c++课件 多态性与虚函数

    C++虚函数表测试源码

    本文将深入探讨C++虚函数表的相关知识点,并通过标题中提到的测试源码进行详细讲解。 首先,理解虚函数的定义:在C++中,当一个基类的指针或引用指向派生类的对象时,如果该基类有一个虚函数,那么通过指针或引用...

    C++继承,虚函数与多态性专题.

    ### C++继承、虚函数与多态性专题 ...综上所述,**继承、虚函数与多态性** 是 C++ 中非常重要的概念。理解这些概念对于编写高质量的面向对象程序至关重要。通过合理利用这些特性,可以大大提高代码的灵活性和可扩展性。

    C++继承,虚函数与多态性专题

    本文分两部分即继承和虚函数与多态性,本文第一部分详细讲解了继承时的构造函数和析构函数的问题,父类与子类的 同名变量和函数问题,最后介绍了多重继承与虚基类。本文第二部分重点介绍了虚函数与多态性的问题,...

    C++虚函数实现原理

    ### C++虚函数实现原理 #### 一、引言 在C++中,虚函数机制是面向对象编程中实现多态的重要方式之一。通过虚函数,可以在基类中定义一个接口,并由派生类来具体实现该接口的功能,进而允许在运行时根据对象的实际...

    _虚函数与多态性.ppt

    多态性还有其他实现方式,如模板和函数重载,但虚函数和多态性是C++面向对象编程中的核心工具。在实际开发中,正确使用虚函数和多态性可以创建强大的设计模式,如工厂模式、策略模式等,这些模式在解决复杂问题时...

    c++多态性和虚函数

    ### C++中的多态性和虚函数 在C++编程语言中,多态性是一种重要的特性,它允许子类对象可以被当作其父类对象来处理,从而极大地提高了代码的灵活性和可扩展性。多态性的实现主要依赖于虚函数机制。下面我们将详细...

    C++中虚函数的实现机制

    C++中的虚函数通过使用`vptr`和`vtable`机制,在运行时实现了动态绑定,使得程序可以根据对象的实际类型调用不同的虚函数,从而实现了多态性。理解虚函数的实现机制对于编写高质量、可扩展的C++代码至关重要。

    c++课件第十章虚函数和多态性共19页.pdf.zip

    在C++编程语言中,虚函数(Virtual Functions)和多态性(Polymorphism)是面向对象编程的重要特性,它们为代码提供了灵活性和可扩展性。本课件着重讲解了这两个概念及其在实际编程中的应用。 虚函数是C++中实现...

    虚函数与多态性.ppt

    虚函数和多态性是C++中实现对象间灵活交互的关键特性。它们使得代码可以对未知类型的对象进行操作,提升了代码的灵活性和可维护性。理解并熟练运用这些概念,对于编写高效、可扩展的面向对象程序至关重要。

    C++实验报告多态性.doc

    实验中涉及的纯虚函数和虚函数的应用就是动态多态性的体现。 二、实验内容详解 1. `Point`类的构建:包含两个`double`类型的成员变量`x`和`y`,分别表示点的横坐标和纵坐标。提供了默认构造函数初始化为原点(0.0,...

    C++中多态性的演示

    C++语言通过函数重载、运算符重载和虚函数来实现多态性。本文将通过一个简单的示例来演示C++中的多态性。 在示例中,定义了一个基类 Student,包括一个构造函数和一个成员函数 display()。然后,定义了一个公有派生...

    \Ch4 虚函数与多态性.ppt

    在C++编程语言中,虚函数和多态性是面向对象设计的重要概念,它们允许程序员创建灵活且可扩展的代码结构。本章将深入探讨这两个关键特性。 4.1 静态联编 静态联编,又称为早期匹配,是在编译期间完成的函数调用...

Global site tag (gtag.js) - Google Analytics