`
codepeak
  • 浏览: 32581 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

动态联编与静态联编

阅读更多
#include <iostream>

using namespace std;

class base
{
public:
	virtual void f1(){
		cout<<"f1 of base"<<endl;
	}

	~base(){
		cout<<"destructor base"<<endl;
	}
};

class derive:public base
{
public:
	void f1(){
		cout<<"f1 of derive"<<endl;
	}
	~ derive(){
		cout<<"destructor derive"<<endl;
	}
};

int main(){
	base * pb1 = new base;     //声明基类型的指针,指向实际的基类型对象
	base * pb2 = new derive;   //声明基类型的指针,指向实际的子类型对象
	pb1->f1();                 //调用虚函数
	delete pb1;                //删除对象(调用析构函数)
	pb2->f1();                 //调用虚函数
	delete pb2;                //删除对象(调用析构函数)
}

输出为:
f1 of base
destructor base
f1 of derive
destructor base
说明:
       只要将基类的函数设置为虚函数,那么所有覆盖它的子类的函数也都是虚函数,而不需要再使用virtual关键字声明了。
       调用虚函数f1时,使用的是动态联编,它是根据运行时pb1,pb2指针所指向的对象的实际类型来调用函数。
       调用析构函数时,由于它不是虚函数,采用的是静态联编,它是根据指针pb1,pb2的声明类型来调用函数的。

       解决这个问题的方法是将base类的析构函数声明为virtual。
分享到:
评论

相关推荐

    (转)C++中解析动态联编

    这种技术与静态联编形成对比,后者在编译时就已经确定了函数调用。在C++中,多态性使得程序员可以设计通用的代码,这些代码能够处理不同类型的对象,而无需知道这些对象的具体实现细节。 静态联编是C语言的主要特点...

    C++虚函数与静态动态联编个人理解

    C++虚函数与静态动态联编个人理解

    c++ 静态联编和动态联编(代码举例,文字说明详细)(csdn)————程序.pdf

    根据联编发生的时机,可以分为静态联编(static binding)和动态联编(dynamic binding)。 **静态联编** 静态联编在编译期间就已经完成,即编译器在编译阶段就能确定函数的调用。这意味着,当一个函数通过指针或...

    C++与操作系统等面试题44

    ### 动态联编与静态联编 #### 一、联编的概念 在计算机编程领域,特别是面向对象语言中,**联编**是指一个程序的不同部分如何被连接在一起的过程。根据联编发生的时机,可以将其分为两大类:静态联编和动态联编。 ...

    C++的静态联编和动态联编

    根据联编的时间点,可以分为静态联编和动态联编。 静态联编,也称为早期联编,发生在程序的编译和链接阶段。在编译期间,编译器就能确定函数调用的具体实现,从而建立起调用与实现之间的直接关联。这意味着,当一个...

    C++网络作业6答案.docx

    1. 动态联编与静态联编的区别在于,动态联编是在运行时确定调用的函数,而静态联编(也称为早期联编)则在编译时确定。动态联编需要通过指向对象的指针或对象引用来调用虚函数,或者在成员函数内部调用虚函数。 2. ...

    C++的静态联编和动态联编详解

    按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。 静态联编是指在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要...

    虚函数、多态、动态联编

    在C++编程语言中,虚函数、多态和动态联编是面向对象编程的重要特性,它们使得程序设计更加灵活,能够实现抽象和代码复用。虚函数是实现多态的关键机制,它允许我们通过父类指针或引用调用子类重写的方法,从而达到...

    6多态性_动态联编_多态性讲述_

    多态性可以分为两种主要类型:静态联编(Static Binding)和动态联编(Dynamic Binding)。本讲解将深入探讨这两种联编方式,以及虚函数(Virtual Function)、纯虚函数(Pure Virtual Function)和虚析构函数...

    对C++的总论理解

    #### 三、虚函数、动态联编与静态联编 在面向对象编程中,多态性是一种非常重要的特性,它允许我们使用基类类型的指针或引用指向派生类对象,并调用派生类中的重写方法。实现多态性的关键机制之一就是虚函数。 **...

    javascript从入门到精通

    11. **动态联编与静态联编**: JavaScript的动态联编允许在运行时检查对象引用,而Java的静态联编要求编译时确定对象类型,提供更强的类型检查。 学习JavaScript的第一步通常是编写简单的“Hello, World”程序,如...

    c++学习笔记

    #### 八、数组的动态联编与静态联编 **数组的动态联编**和**静态联编**是指数组大小的确定时机。 - **动态联编**: 数组大小在运行时确定。 - **静态联编**: 数组大小在编译时确定。 - **示例**: 使用`const int`...

    C++网络作业6答案 (2).pdf

    1. 动态联编与虚函数的关系: - 动态联编通常在运行时执行,与编译时的静态联编相对。它是通过虚函数实现的。 - 虚函数是类中的非静态成员函数,它允许子类重写基类的行为。 - 没有虚函数,就不能实现基于对象...

    C++实验3:多态性与虚函数

    熟练掌握静态联编和动态联编的概念和用法 掌握纯虚函数和抽象类的概念和用法 实验内容 声明一个抽象类Shape,由它派生出3个类:Circle(圆),Rectangle(矩形)、Triangle(三角形),用函数分别输出以上三个图形的周长和...

    【Qt与Halcon联编程序打包】Match.zip

    【Qt与Halcon联编程序打包】涉及到的是在软件开发中如何将Qt应用程序与Halcon机器视觉库结合,并且将整个程序打包成可执行文件,以便于用户在没有开发环境的计算机上运行。Qt是一个跨平台的应用程序开发框架,而...

    C++面向对象程序设计-章-多态性-虚函数(与“函数”有关文档共45张).pptx

    C++支持两种联编方式:静态联编和动态联编。静态联编是在程序被编译时进行的,而动态联编是在程序运行时进行的。动态联编是C++实现运行时多态性的关键因素。 本文档还提供了一个示例程序,演示了如何使用虚函数来...

    C++网络作业6答案.pdf

    1. 动态联编与虚函数: - 虚函数是动态联编的基础,它允许在运行时动态决定调用哪个函数。 - 动态联编不是在编译时确定操作函数,而是在运行时根据对象的实际类型确定。 - 为了实现动态联编,类之间需要满足子...

Global site tag (gtag.js) - Google Analytics