动态联编-静态联编

来源:互联网 发布:p2p 知乎 编辑:程序博客网 时间:2024/04/28 23:32

动态联编又称动态关联

  定义:  

编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要确切知道该调用的函数,要求联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联编。  

动态联编必须包括以下方面:   

成员函数必须声明为virtual   

如果基类中声明了为虚函数,则派生类中不必再声明。   

 

调用方式:   

通过对象的指针或引用调用成员函数;或通过成员函数调用,反之就无法实现动态联编。  

 

例如:  

#include <iostream>  

using namespace std;  

const float pi=3.14159;   

class circle1  

{  

public:  

virtual float area( ) //把area声明为虚函数

  {  

   radius=2.5;  

   return pi*radius*radius;  

  }   

private:  

float radius;   

};  

class circle2:public circle1   

{  

 public:   

  float area( )   

  {  

  radius=5.5;  

  return pi*radius*radius;  

  }  

 private:

  float radius;   

};

 

void main()   

{   

 while(true)  

 {  

  cout<<"请输入1或2./n";  

  int choise;  

  cin>>choise;  

  circle1 *p; //定义一个类circle1的指针变量p  

  switch(choise)  

  {  

   case 1:p=new circle1;

        break;

   case 2:p=new circle2;  

       break;  

   default:break;  

  }  

 cout<<"the area of the circle"<<choise<<" "<<p->area()<<endl;   

 }  

}

 

虚函数->重载?进行动态关联

 

 

 

 

动态联编 : int* temp = new int[size];  delete [] temp;  ->属于动态存储 可人为控制大小和生灭

静态联编 : int temp[1024];  ->属于自动(静态)存储 大小一旦确定不可更改地占有相应空间,机械地按预定规则生灭

 

静态存储 Static 全局

动态存储 new delete 人为控制

自动存储 函数内,函数结束,相应解题

 

 

 

原创粉丝点击