精华内容
下载资源
问答
  • 静态联编

    2019-05-30 16:55:52
    静态联编 静态联编支持的多态性,我们将其称为编译时的多态性,又称为静态的多态性。 静态联编是在程序开始执行之前进行的。即在编译,连接的过程中,系统可以根据类型匹配等特征确定在什么地方调用什么函数。 ...

    静态联编

    1. 静态联编支持的多态性,我们将其称为编译时的多态性,又称为静态的多态性。
    2. 静态联编是在程序开始执行之前进行的。即在编译,连接的过程中,系统可以根据类型匹配等特征确定在什么地方调用什么函数。
    3. 那么可见,编译时的多态性可以通过函数重载来实现。函数重载的意义在于它可以用同一个名字访问一组相关的函数,能使用户为某一类操作取一个通用的名字。编译程序在编译时决定选择具体的函数段执行,这种方式也利于解决程序的复杂性。静态联编函数调用速度快,效率高,但是编程不灵活。
    4. C++中通过两种工作方式实现编译的多态性:函数重载和运算符重载。它们都属于静态联编。
    5. 分析该程序的运行结果可知,由于程序中完成的是静态联编,在程序编译阶段,基类指针p对于area方法的调用只能绑定到基类的area方法上,虽然程序运行时p指向了不同的派生类对象,但绑定已在编译阶段完成,所以无论运行时p指向什么类型的对象,始终调用的都是基类中的area方法。有时候这种联编方式输出的结果可能并不是我们期望的结果。
    6. 关于类型兼容原则,在实际应用时应注意以下几个方面:
      (1).基类的指针可以指向它的公有派生类对象,但是不允许指向它的私有或保护派生类的对象。
      (2).派生类的指针不允许指向它基类的对象。
      (3).基类的指针指向它的公有派生类对象时,只能用它来直接访问派生类中从基类继承的成员,而不能直接访问公有派生类中定义的新成员。
    #include <iostream>
    
    using namespace std;
    
    //静态联编示例
    class Shape{
    	int x;
    	int y;
    	public:
    		Shape(int px,int py):x(px),y(py)
    		{
    			cout<<"construct Shape"<<endl;
    		}
    		float area()
    		{
    			return 0;
    		}
    };
    
    class Rectangle:public Shape{
    	int w;
    	int h;
    	public:
    		Rectangle(int px,int py,int pw,int ph):Shape(px,py),w(pw),h(ph)
    		{
    			cout<<"construct Rectangle"<<endl;
    		}
    		float area()
    		{
    			return w*h;
    		}
    };
    
    class Circle:public Shape{
    	int r;
    	public:
    		Circle(int px,int py,int pr):Shape(px,py),r(pr)
    		{
    			cout<<"construct Circle"<<endl;
    		}
    		float area()
    		{
    			return 3.14*r*r;
    		}
    };
    int main()
    {
    	Rectangle a(30,40,4,8);
    	Circle b(30,40,4);
    	Shape *p=&a;
    	cout<<a.area()<<endl;
    	cout<<p->area()<<endl;
    	p=&b;
    	cout<<b.area()<<endl;
    	cout<<p->area()<<endl;
    	return 0;
    }
    

    运行结果:
    /

    展开全文
  • 静态联编是指在编译阶段就将函数实现和函数调用关联起来,因此静态联编也叫早绑定,在编译阶段就必须了解所有的函数或模块执行所需要检测的信息,它对函数的选择是基于指向对象的指针(或者引用)的类型,C语言中,...
  • 本文阐述了静态联编和动态联编的概念和区别,通过具体实例分析了实现动态联编的条件,指出了虚函数是实现动态联编的基础。
  • 动态联编和静态联编

    2021-03-08 15:55:44
    动态联编和静态联编 一、静态联编 定义 在编译时所进行的这种联编又称静态束定,在编译时就解决了程序中的操作调用与执行该操作代码间的关系。 注意: 静态联编由可访问属性和默认值确定 二、动态联编 定义 编译...

    动态联编和静态联编
    一、静态联编

    1. 定义
      在编译时所进行的这种联编又称静态束定,在编译时就解决了程序中的操作调用与执行该操作代码间的关系。
    2. 注意:
      静态联编由可访问属性和默认值确定

    二、动态联编

    1. 定义
      编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序运行时才能确定将要调用的函数,为此要确切知道该调用的函数,要求联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联编。动态联编又称动态关联。
    2. 组成
      (1)成员函数必须声明为virtual
      (2)如果基类中声明了为虚函数,则派生类中不必再声明。
    3. 调用方式
      通过对象的指针或引用调用成员函数;或通过成员函数调用,反之就无法实现动态联编。
      如下代码: 在这里插入图片描述
      运行结果如下:
      在这里插入图片描述
      原因:
      首先,创建base对象时,先创建base中的隐藏父对象Object,op指针是Object类型的指针,op->fun()时,静态联编,确定可访问属性(public),编译可以通过,默认值为10,在我们运行程序调动的时候,是动态联编,通过查询base中的虚表指针(指向base的虚表),动态调用base中的fun函数,但默认值为10,不是20.所以把10给了a。
    展开全文
  • 静态联编和动态联编

    2019-02-28 23:48:43
    静态联编;动态联编;虚函数 在C++中,联编是指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。 1.静态联编 静态联编是指联编工作在编译...

    写在前边:转的, 存一下

    静态联编;动态联编;虚函数

    在C++中,联编是指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。

        1. 静态联编

     

    静态联编是指联编工作在编译阶段完成的,这种联编过程是在程序运行之前完成的,又称为早期联编。要实现静态联编,在编译阶段就必须确定程序中的操作调用(如函数调用)与执行该操作代码间的关系,确定这种关系称为束定,在编译时的束定称为静态束定。静态联编对函数的选择是基于指向对象的指针或者引用的类型。其优点是效率高,但灵活性差。

    例1:静态联编

     

    
     
    1. #include"iostream.h"
      
      class A
      
      {public:
      
      voidf(){cout<<"A"<<"";}
      
      };
      
      classB:publicA
      
      {public:
      
      voidf(){cout<<"B"<<endl;}
      
      };
      
      Void main()
      
      {A*pa=NULL;
      
      Aa;Bb;
      
      pa=&a;pa->f();
      
      pa=&b;pa->f();
      
      }

    该程序的运行结果为:A   A

    从例1程序的运行结果可以看出,通过对象指针进行的普通成员函数的调用,仅仅与指针的类型有关,而与此刻指针正指向什么对象无关。要想实现当指针指向不同对象时执行不同的操作,就必须将基类中相应的成员函数定义为虚函数,进行动态联编。

     

    2. 动态联编

    动态联编是指联编在程序运行时动态地进行,根据当时的情况来确定调用哪个同名函数,实际上是在运行时虚函数的实现。这种联编又称为晚期联编,或动态束定。动态联编对成员函数的选择是基于对象的类型,针对不同的对象类型将做出不同的编译结果。C++中一般情况下的联编是静态联编,但是当涉及到多态性和虚函数时应该使用动态联编。动态联编的优点是灵活性强,但效率低。

    动态联编规定,只能通过指向基类的指针或基类对象的引用来调用虚函数,其格式为:指向基类的指针变量名->虚函数名(实参表)或基类对象的引用名.虚函数名(实参表)

    实现动态联编需要同时满足以下三个条件:

    ①    必须把动态联编的行为定义为类的虚函数。

    ②    类之间应满足子类型关系,通常表现为一个类从另一个类公有派生而来。

    ③    必须先使用基类指针指向子类型的对象,然后直接或者间接使用基类指针调用虚函数。

    例2:动态联编

     

    
     
    1. #include"iostream.h"
      
      classA
      
      {public:
      
      Virtual voidf()//虚函数
      
      {cout<<"A"<<"";}};
      
      classB:publicA
      
      {public:
      
      Virtual voidf()//虚函数
      
      {cout<<"B"<<endl;}
      
      };
      
      voidmain()
      
      { A*pa=NULL;
      
      Aa;Bb;
      
      pa=&a;
      
      pa->f();
      
      pa=&b;
      
      pa->f();
      
      }

     

    该程序的运行结果为:A  B

    从例2程序的运行结果可以看出,将基类A中的函数f定义为虚函数后,当指针指向不同对象时执行了不同的操作,实现了动态联编。

    展开全文
  • 静态联编与动态联编

    千次阅读 2018-08-05 00:47:26
    将模板或者函数合并在一起生成可执行代码的处理过程(函数调用),按照联编进行的时间不同,可分为两种不同的联编方法:静态联编和动态联编。简单来理解,联编就是处理函数调用的过程 1)编译阶段进行的就是静态联...

    1.什么是联编

    将模板或者函数合并在一起生成可执行代码的处理过程(函数调用),按照联编进行的时间不同,可分为两种不同的联编方法:静态联编和动态联编。简单来理解,联编就是处理函数调用的过程

    1)编译阶段进行的就是静态联编

    2)程序运行阶段进行的就是动态联编

     

    2.静态联编与动态联编的区别

    1)静态联编适用于一般的函数调用,而动态联编适用于多态

    2)C语言中的函数调用都是静态联编,多态联编只存在于C++的多态

     

    3.动态联编的例子

    #include <iostream>
    using namespace std;
    
    class Cfather
    {
    public:
    	virtual void fun()
    	{
    		cout << "From Father" << endl;
    	}
    };
    
    class Cson : public Cfather
    {
    public:
    	void fun()
    	{
    		cout << "From Son" << endl;
    	}
    };
    
    
    int main()
    {
    	Cfather *per;
    	int a;
    	cin >> a;
    
    	switch (a)
    	{
    	case 0:
    		per = new Cfather;
    		break;
    	case 1:
    		per = new Cson;
    		break;
    	default:
    		break;
    	}
    
    	per->fun();
    
    	system("pause");
    	return 0;
    }
    

    不过编译报错:

    目前还不知道为什么??

     

     

     

    展开全文
  • 静态联编和动态联编 (一)多态的分类(多态:父类的引用或者指针 指向子类对象) 静态多态:编译时期确定了调用函数地址,早绑定,静态联编;运算符重载,函数重载 动态多态:执行时期确定调用函数的地址,晚绑定,...
  • C++静态联编和动态联编 一、简介 程序调用函数时,将使用哪个可执行代码块呢?编译器负责回答这个问题。将源代码中的函数调用解释为执行特定的函数 代码块被称为函数名联编。 在C语言中,这非常简单,因为每个函数名...
  • 动态联编与静态联编的区别

    千次阅读 2019-03-18 14:40:57
    摘要】:本文阐述了静态联编和动态联编的概念和区别,通过具体实例分析了实现动态联编的条件,指出了虚函数是实现动态联编的基础。 【关键词】:静态联编;动态联编;虚函数 在C++中,联编是指一个计算机程序的...
  • &nbsp        在C++中,联编是指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,...静态联编是指联编工作在编译阶段完成的,这种联编过程是在程序运行...
  • 静态联编:  在编译阶段将函数实现和函数调用绑定起来称为静态联编,C语言中,所有联编都是静态联编,C++ 一般情况下也是静态联编
  • 文章目录前言一、静态联编二、动态联编 前言   本文主要介绍C++编程中,静态联编和动态联编的概念。静态联编和动态联编是C++中的两种主要的地址分配的决策策略。 一、静态联编静态联编的决策策略是指,在...
  • 静态联编:在编译时所进行的这种联编又称静态束定,在编译时就解决了程序中的操作调用与执行该操作代码间的关系。(范围很大,比静态多态大)。 动态联编:编译程序在编译阶段并不能确切知道将要调用的函数,只有在...
  • C++静态联编与动态联编

    千次阅读 多人点赞 2018-12-06 09:15:28
    就是将模块或者函数合并在一起生成可执行代码的处理过程(函数调用),按照联编所进行的阶段不同,可分为两种不同的联编方式:静态联编和动态联编。 函数调用和实现的过程 C++只有用到多态才会用到动态连编 程序员...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,228
精华内容 491
关键字:

静态联编