當前位置:首頁 » 編程軟體 » 聯編程序

聯編程序

發布時間: 2022-09-06 17:27:00

Ⅰ 聯編的靜態聯編

靜態聯編又稱靜態束定、早期聯編、前期聯編。
靜態聯編是指聯編工作是在程序編譯連接階段進行的,靜態聯編又稱早期聯編,因為這種聯編是在程序開始運行之前完成的。在程序編譯階段進行的這種聯編又稱靜態束定,在編譯時就解決了程序中的操作調用與執行該操作代碼間的關系,確定這種關系又被稱為束定,編譯時束定又稱為靜態束定。 #include<iostream.h>classpoint{private:floatx,y;public:voidsetPoint(floatI,floatj){x=I;y=j;}floatarea(){return0;}};constfloatpi=3.14159;classcircle:publicpoint{private:floatradius;public:voidsetRadius(floatr){radius=r;}floatarea(){returnpi*radius*radius;}};voidmian(){pointp;floata=p.area();//調用point類的成員函數cout<<theareaofthepointpis<<a<<endl;circlec;c.setRadius(2.5);a=c.area();//調用circle類的成員函數cout<<theareaofthecirclecis<<a<<endl;}程序結果為:
the area of the point p is 0
the area of the circle c is 19.634937
這就是靜態聯編,編譯器在程序運行前就知道什麼函數做什麼事。

Ⅱ c++動態聯編 靜態聯編

靜態聯編

靜態聯編是指聯編工作出現在編譯連接階段,這種聯編又稱早期聯編,因為這種聯編過程是在程序開始運行之前完成的。

在編譯時所進行的這種聯編又稱靜態束定。在編譯時就解決了程序中的操作調用與執行該操作代碼間的關系,確定這種關系又稱為束定,在編譯時束定又稱靜態束定。下面舉一個靜態聯編的例子。

#include

class Point
{
public:
Point(double i, double j) { x=i; y=j; }
double Area() const { return 0.0; }
private:
double x, y;
};
class Rectangle:public Point
{
public:
Rectangle(double i, double j, double k, double l);
double Area() const { return w*h; }
private:
double w, h;
};
Rectangle::Rectangle(double i, double j, double k, double l):Point(i, j)
{
w=k; h=l;
}
void fun(Point &s)
{
cout< }

void main()
{
Rectangle rec(3.0, 5.2, 15.0, 25.0);
fun(rec);
}

該程序的運行結果為:

0

輸出結果表明在fun()函數中,s所引用的對象執行的Area()操作被關聯到Point::Area()的實現代碼上。這是因為靜態聯編的結果。在程序編譯階段,對s所引用的對象所執行的Area()操作只能束定到Point類的函數上。因此,導致程序輸出了所不期望的結果。因為我們期望的是s引用的對象所執行的Area()操作應該束定到Rectangl類的Area()函數上。這是靜態聯編所達不到的。

動態聯編

從對靜態聯編的上述分析中可以知道,編譯程序在編譯階段並不能確切知道將要調用的函數,只有在程序執行時才能確定將要調用的函數,為此要確切知道該調用的函數,要求聯編工作要在程序運行時進行,這種在程序運行時進行聯編工作被稱為動態聯編,或稱動態束定,又叫晚期聯編。

動態聯編實際上是進行動態識別。在上例中,前面分析過了靜態聯編時,fun()函數中s所引用的對象被束定到Point類上。而在運行時進行動態聯編將把s的對象引用束定到Rectangle類上。可見,同一個對象引用s,在不同階段被束定的類對象將是不同的。那麼如何來確定是靜態聯編還是動態聯編呢?C++規定動態聯編是在虛函數的支持下實現的。

從上述分析可以看出靜態聯編和動態聯編也都是屬於多態性的,它們是不同階段對不同實現進行不同的選擇。上例中,實現上是對fun()函數參數的多態性的選擇。該函數的參數是一個類的對象引用,靜態聯編和動態聯編和動態聯編實際上是在選擇它的靜態類型和動態類型。聯編是對這個引用的多態性的選擇。

Ⅲ c++中怎麼理解動態聯編和靜態聯編

轉一個西部數碼的:
聯編是指一個電腦程式自身彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編。
靜態聯編

靜態聯編是指聯編工作出現在編譯連接階段,這種聯編又稱早期聯編,因為這種聯編過程是在程式開始運行之前完成的。

在編譯時所進行的這種聯編又稱靜態束定。在編譯時就解決了程式中的操作調用和執行該操作代碼間的關系,確定這種關系又稱為束定,在編譯時束定又稱靜態束定。下面舉一個靜態聯編的例子。

#include

class Point
{
public:
Point(double i, double j) { x=i; y=j; }
double Area() const { return 0.0; }
private:
double x, y;
};
class Rectangle:public Point
{
public:
Rectangle(double i, double j, double k, double l);
double Area() const { return w*h; }
private:
double w, h;
};
Rectangle::Rectangle(double i, double j, double k, double l):Point(i, j)
{
w=k; h=l;
}
void fun(Point &s)
{
cout< }

void main()
{
Rectangle rec(3.0, 5.2, 15.0, 25.0);
fun(rec);
}

該程式的運行結果為:

0

輸出結果表明在fun()函數中,s所引用的對象執行的Area()操作被關聯到Point::Area()的實現代碼上。這是因為靜態聯編的結果。在程式編譯階段,對s所引用的對象所執行的Area()操作只能束定到Point類的函數上。因此,導致程式輸出了所不期望的結果。因為我們期望的是s引用的對象所執行的Area()操作應該束定到Rectangl類的Area()函數上。這是靜態聯編所達不到的。

動態聯編

從對靜態聯編的上述分析中能夠知道,編譯程式在編譯階段並不能確切知道將要調用的函數,只有在程式執行時才能確定將要調用的函數,為此要確切知道該調用的函數,需要聯編工作要在程式運行時進行,這種在程式運行時進行聯編工作被稱為動態聯編,或稱動態束定,又叫晚期聯編。

動態聯編實際上是進行動態識別。在上例中,前面分析過了靜態聯編時,fun()函數中s所引用的對象被束定到Point類上。而在運行時進行動態聯編將把s的對象引用束定到Rectangle類上。可見,同一個對象引用s,在不同階段被束定的類對象將是不同的。那麼如何來確定是靜態聯編還是動態聯編呢?C 規定動態聯編是在虛函數的支持下實現的。

從上述分析能夠看出靜態聯編和動態聯編也都是屬於多態性的,他們是不同階段對不同實現進行不同的選擇。上例中,實現上是對fun()函數參數的多態性的選擇。該函數的參數是個類的對象引用,靜態聯編和動態聯編和動態聯編實際上是在選擇他的靜態類型和動態類型。聯編是對這個引用的多態性的選擇。

Ⅳ c++裡面什麼時候用到動態聯編(綁定),什麼時候用到靜態聯編

聯編是指一個計算機程序自身彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:靜態聯編和動態聯編。 靜態聯編 靜態聯編是指聯編工作出現在編譯連接階段,這種聯編又稱早期聯編,因為這種聯編過程是在程序開始運行之前完成的。 在編譯時所進行的這種聯編又稱靜態束定。在編譯時就解決了程序中的操作調用與執行該操作代碼間的關系,確定這種關系又稱為束定,在編譯時束定又稱靜態束定。下面舉一個靜態聯編的例子。 #include class Point
{
public: Point(double i, double j)
{ x=i; y=j; }
double Area()
const { return 0.0; }
private: double x, y; };
class Rectangle:public Point { public: Rectangle(double i, double j, double k, double l);
double Area() const { return w*h; } private: double w, h; };
Rectangle::Rectangle(double i, double j, double k, double l):Point(i, j) { w=k; h=l; } void fun(Point &s) { cout<< }
void main()
{ Rectangle rec(3.0, 5.2, 15.0, 25.0); fun(rec); }
該程序的運行結果為: 0 輸出結果表明在fun()函數中,s所引用的對象執行的Area()操作被關聯到Point::Area()的實現代碼上。這是因為靜態聯編的結果。在程序編譯階段,對s所引用的對象所執行的Area()操作只能束定到Point類的函數上。因此,導致程序輸出了所不期望的結果。因為我們期望的是s引用的對象所執行的Area()操作應該束定到Rectangl類的Area()函數上。這是靜態聯編所達不到的。 動態聯編 從對靜態聯編的上述分析中可以知道,編譯程序在編譯階段並不能確切知道將要調用的函數,只有在程序執行時才能確定將要調用的函數,為此要確切知道該調用的函數,要求聯編工作要在程序運行時進行,這種在程序運行時進行聯編工作被稱為動態聯編,或稱動態束定,又叫晚期聯編。 動態聯編實際上是進行動態識別。在上例中,前面分析過了靜態聯編時,fun()函數中s所引用的對象被束定到Point類上。而在運行時進行動態聯編將把s的對象引用束定到Rectangle類上。可見,同一個對象引用s,在不同階段被束定的類對象將是不同的。那麼如何來確定是靜態聯編還是動態聯編呢?C++規定動態聯編是在虛函數的支持下實現的。 從上述分析可以看出靜態聯編和動態聯編也都是屬於多態性的,它們是不同階段對不同實現進行不同的選擇。上例中,實現上是對fun()函數參數的多態性的選擇。該函數的參數是一個類的對象引用,靜態聯編和動態聯編和動態聯編實際上是在選擇它的靜態類型和動態類型。聯編是對這個引用的多態性的選擇。

Ⅳ 淺談靜態聯編和動態聯編的區別和實現動態聯編的

聯編是指一個程序自身彼此關聯的過程。按照聯編所進行的階段不同,可分為靜態聯編和動態聯編。
靜態聯編又稱靜態綁定,指在調用同名函數(即重載函數)時編譯器將根據調用時所使用的實參在編譯時就確定下來應該調用的函數實現。它是在程序編譯連接階段進行聯編的,這種聯編又稱為早期聯編,這是因為這種聯編工作是在程序運行之前完成的。它的優點是速度快,效率高,但靈活性不夠。
編譯時所進行的聯編又稱為靜態束定。束定是指確定所調用的函數與執行該函數代碼之間的關系。
動態聯編也稱動態綁定,是指在程序運行時,根據當時的情況來確定調用的同名函數的實現,實際上就是在運行時選擇虛函數的實現。這種聯編又稱為晚期聯編或動態(束定。實現條件:①要有繼承性且要求創建子類型關系;)②要有虛函數;③通過基類的對象指針或引用訪問虛函數。繼承是動態聯編的基礎,虛函數是動態聯編的關鍵,虛函數經過派生之後,在類族中就可以實現運行過程中的多態。動態聯編要求在運行時解決程序中的函數調用與執行該函數代碼間的關系,調用虛函數的對象是在運行時確定的。對於同一個對象的引用,採用不同的聯編方式將會被聯編到不同類的對象上。即不同聯編可以選擇不同的實現,這便是多態性。它的優點是靈活性強,但效率較低。

Ⅵ 在程序運行階段完成的聯編稱為什麼 什麼可以實現這種聯編。

動態聯編

編譯程序在編譯階段並不能確切知道將要調用的函數,只有在程序執行時才能確定將要調用的函數,為此要確切知道該調用的函數,要求聯編工作要在程序運行時進行,這種在程序運行時進行聯編工作被稱為動態聯編。
動態聯編必須包括以下方面:
成員函數必須聲明為virtual
如果基類中聲明了為虛函數,則派生類中不必再聲明。
調用方式:
通過對象的指針或引用調用成員函數;或通過成員函數調用,反之就無法實現動態聯編。

熱點內容
跨平台編譯語言有哪些 發布:2025-03-20 19:08:25 瀏覽:779
音樂appftp安卓 發布:2025-03-20 19:03:24 瀏覽:305
家長申述驗證的密碼是什麼 發布:2025-03-20 18:55:27 瀏覽:7
編譯原理與技術第二版下載 發布:2025-03-20 18:55:26 瀏覽:937
怎麼寫編程語言 發布:2025-03-20 18:42:52 瀏覽:688
我去密碼是多少 發布:2025-03-20 18:12:28 瀏覽:541
方舟編譯器啥時候開始 發布:2025-03-20 18:11:40 瀏覽:959
常用java類 發布:2025-03-20 18:07:06 瀏覽:202
怎麼查看安卓大屏使用的什麼協議 發布:2025-03-20 18:03:07 瀏覽:705
好用的linux系統 發布:2025-03-20 17:51:15 瀏覽:649