国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++多態(tài)與虛擬:Objects 實(shí)例化(Objects Instantiation)探究

這篇具有很好參考價(jià)值的文章主要介紹了C++多態(tài)與虛擬:Objects 實(shí)例化(Objects Instantiation)探究。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、Objects的創(chuàng)建 

  依據(jù)已有的class CPoint ,我們可以產(chǎn)生一個(gè)或多個(gè)object(對(duì)象),或者說是產(chǎn)生一個(gè)instance(實(shí)體):

CPoint aPoint(7.2); // aPoint._x 初始值為 7.2
aPoint.x(5.3); // aPoint._x 現(xiàn)值為 5.3

  這樣的objects可能放在函數(shù)的stack之中(對(duì)象是在函數(shù)內(nèi)部創(chuàng)建的,例如在函數(shù)的作用域內(nèi)),也有可能放在程序的data segment中(對(duì)象是在函數(shù)外部創(chuàng)建的,例如在全局作用域或靜態(tài)作用域內(nèi))。我們也可以這樣來產(chǎn)生一個(gè)objects:

CPoint* pPoint = new CPoint(3.6); // pPoint->_x 初 值 為 3.6
pPoint->x(5.3); // pPoint->_x 現(xiàn)值為 5.3
delete pPoint;

  使用new operator產(chǎn)生的objects,是放在程序的heap(堆)之內(nèi)。

  不管哪一種方式來產(chǎn)生objects,我們依據(jù)某個(gè)class產(chǎn)生一個(gè)object的動(dòng)作稱為instantiation(實(shí)例化)。object的誕生和死亡時(shí),會(huì)自動(dòng)調(diào)用class中特殊的member function,稱為constructor 和 destructor。

  Constructor:object誕生時(shí)會(huì)自動(dòng)調(diào)用的class member functions稱為構(gòu)造函數(shù),此函數(shù)的命名必須與class相同,參數(shù)可以自定,沒有返回值。class可以有一個(gè)以上的constructors,其中無參數(shù)的那個(gè)稱為default constructor;只有一個(gè)參數(shù),并且以該class為參數(shù)類型的,稱為copy constructor。

  Destructor?:object生命結(jié)束時(shí)會(huì)自動(dòng)調(diào)用的class member function稱為析構(gòu)函數(shù),一個(gè)class只能有一個(gè)destructor,沒有參數(shù),沒有返回值,其命名必須與class相同,并以~為前置符號(hào)。

二、Objects 的生命Scope of Objects

? ? 由于objects可能位于stack或heap或data segment之中,所以objects的生命周期就有差異。

  1. 放在stack之中的稱為local objects,它的生命隨著objects的產(chǎn)生產(chǎn)而開始,隨著所在函數(shù)的執(zhí)行結(jié)束而結(jié)束。

  2.放在data segment之中的稱為gobal objects,它的生命隨著程序的開(比程序進(jìn)入點(diǎn)還早),隨著程序的結(jié)束而結(jié)束。

  3.放?在heap之中的稱為heap objects,它的生命隨著new operator而開始,隨著delete operator而結(jié)束?!   ?/span>

  下面這個(gè)例子出現(xiàn)了剛剛所提到的三種不同的生命周期的objects。從程序的執(zhí)行結(jié)果,我們可以清楚的看到三種objects的生命范圍。其中用到的constructors(構(gòu)造函數(shù))和destructors(析構(gòu)函數(shù))。這個(gè)例子出現(xiàn)剛剛所提的三種不同生命週期的 objects。從程式的執(zhí)行結(jié)果,
我們可以清楚看到三種 objects 的生命範(fàn)圍。其中用到的 constructors(建構(gòu)式) destructors。

#include <iostream.h>
#include <string.h>
class CDemo
{
  public:
     CDemo(const char* str); // constructor
     ~CDemo(); // destructor
  private:
     char name[20];
};
 CDemo::CDemo(const char* str) // constructor
{
  strncpy(name, str, 20);
   cout << "Constructor called for " << name << '\n';
 }
CDemo::~CDemo() // destructor
{
   cout << "Destructor called for " << name << '\n';
}
void func()
{
   CDemo LocalObjectInFunc("LocalObjectInFunc"); 
  static CDemo StaticObject("StaticObject"); 
  CDemo* pHeapObjectInFunc = new CDemo("HeapObjectInFunc"); 
  cout << "Inside func" << endl; 
 }
CDemo GlobalObject("GlobalObject"); 
void main()
{
   CDemo LocalObjectInMain("LocalObjectInMain"); 
   CDemo* pHeapObjectInMain = new CDemo("HeapObjectInMain"); 
   cout << "In main, before calling func\n"; 
   func();
   cout << "In main, after calling func\n"; 
}

  執(zhí)行結(jié)果如下(注意,上例有new的動(dòng)作,卻沒有delete,是個(gè)錯(cuò)誤示范):

1. Constructor called for GlobalObject 
2. Constructor called for LocalObjectInMain 
3. Constructor called for HeapObjectInMain 
4. In main, before calling func 
5. Constructor called for LocalObjectInFunc 
6. Constructor called for StaticObject 
7. Constructor called for HeapObjectInFunc 
8. Inside func 
9. Destructor called for LocalObjectInFunc 
10. In main, after calling func 
11. Destructor called for LocalObjectInMain 
12. Destructor called for StaticObject 
13. Destructor called for GlobalObject 

?

?文章來源地址http://www.zghlxwxcb.cn/news/detail-860222.html

到了這里,關(guān)于C++多態(tài)與虛擬:Objects 實(shí)例化(Objects Instantiation)探究的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C語言】數(shù)據(jù)結(jié)構(gòu)——帶頭雙鏈表實(shí)例探究

    【C語言】數(shù)據(jù)結(jié)構(gòu)——帶頭雙鏈表實(shí)例探究

    ??個(gè)人主頁?? ?個(gè)人專欄——數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)? ??點(diǎn)擊關(guān)注??一起學(xué)習(xí)C語言???? 我們?cè)谇懊鎸W(xué)習(xí)了單鏈表和順序表。 今天我們來學(xué)習(xí)雙向循環(huán)鏈表。 在經(jīng)過前面的一系列學(xué)習(xí),我們已經(jīng)掌握很多知識(shí),相信今天的內(nèi)容也是很容易理解的。 關(guān)注博主或是訂閱專欄,掌握第

    2024年02月03日
    瀏覽(25)
  • 【C語言】數(shù)據(jù)結(jié)構(gòu)——棧和隊(duì)列實(shí)例探究

    【C語言】數(shù)據(jù)結(jié)構(gòu)——棧和隊(duì)列實(shí)例探究

    ??個(gè)人主頁?? ?個(gè)人專欄——數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)? ??點(diǎn)擊關(guān)注??一起學(xué)習(xí)C語言???? 我們?cè)谇懊鎸W(xué)習(xí)了單鏈表和順序表,今天我們來學(xué)習(xí)棧和隊(duì)列。 棧和隊(duì)列相對(duì)于單鏈表和順序表來說是較為簡(jiǎn)單的,之后我們?cè)偕钊雽W(xué)習(xí)雙鏈表。關(guān)注博主或是訂閱專欄,掌握第一消息。 棧

    2024年02月05日
    瀏覽(25)
  • 【C語言】數(shù)據(jù)結(jié)構(gòu)——鏈?zhǔn)蕉鏄鋵?shí)例探究

    【C語言】數(shù)據(jù)結(jié)構(gòu)——鏈?zhǔn)蕉鏄鋵?shí)例探究

    ??個(gè)人主頁?? ?個(gè)人專欄——數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)? ??點(diǎn)擊關(guān)注??一起學(xué)習(xí)C語言???? 我們?cè)谇懊鎸W(xué)習(xí)了單鏈表,順序表,棧和隊(duì)列,小堆。 今天我們來學(xué)習(xí)鏈?zhǔn)蕉鏄?關(guān)注博主或是訂閱專欄,掌握第一消息。 鏈?zhǔn)蕉鏄洌↙inked Binary Tree)是一種基于鏈表實(shí)現(xiàn)的二叉樹結(jié)構(gòu)。

    2024年02月04日
    瀏覽(29)
  • 關(guān)于java中的多態(tài)和對(duì)實(shí)例化對(duì)象的一些理解

    關(guān)于java中的多態(tài)和對(duì)實(shí)例化對(duì)象的一些理解

    java面向?qū)ο笕筇卣骷礊椋豪^承封裝多態(tài)。而多態(tài)需要三大必要條件。分別是:繼承、方法重寫、父類引用指向子類對(duì)象。我們先一個(gè)一個(gè)來理解。 1、首先是繼承和重寫。這個(gè)很簡(jiǎn)單。因?yàn)槎鄳B(tài)就是建立在不同的重寫之上的。也就是說多態(tài)就是在使用著一個(gè)方法的不同重寫

    2024年02月02日
    瀏覽(23)
  • unity C#中的封裝、繼承和多態(tài)簡(jiǎn)單易懂的經(jīng)典實(shí)例

    unity C#中的封裝、繼承和多態(tài)簡(jiǎn)單易懂的經(jīng)典實(shí)例

    C#中的封裝、繼承和多態(tài)是面向?qū)ο缶幊蹋∣OP)的三大核心特性。下面分別對(duì)這三個(gè)概念進(jìn)行深入解釋,并通過實(shí)例來說明它們?cè)趯?shí)際開發(fā)中的應(yīng)用。 封裝 (Encapsulation) 實(shí)例1: 在這個(gè)例子中, BankAccount 類封裝了賬戶余額(balance),外部不能直接修改它,只能通過 Deposit 和

    2024年02月22日
    瀏覽(25)
  • java中的線程不安全和實(shí)例解析,網(wǎng)絡(luò)安全多態(tài)實(shí)現(xiàn)原理

    java中的線程不安全和實(shí)例解析,網(wǎng)絡(luò)安全多態(tài)實(shí)現(xiàn)原理

    先自我介紹一下,小編浙江大學(xué)畢業(yè),去過華為、字節(jié)跳動(dòng)等大廠,目前阿里P7 深知大多數(shù)程序員,想要提升技能,往往是自己摸索成長(zhǎng),但自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前! 因此收集整理了一份《2024年最新網(wǎng)絡(luò)安全全套學(xué)習(xí)資料》

    2024年04月27日
    瀏覽(25)
  • 關(guān)于java中的多態(tài)和對(duì)實(shí)例化對(duì)象以及向上、向下轉(zhuǎn)型的一些理解

    關(guān)于java中的多態(tài)和對(duì)實(shí)例化對(duì)象以及向上、向下轉(zhuǎn)型的一些理解

    java面向?qū)ο笕筇卣骷礊椋豪^承封裝多態(tài)。而多態(tài)需要三大必要條件。分別是:繼承、方法重寫、父類引用指向子類對(duì)象。我們先一個(gè)一個(gè)來理解。 1、首先是繼承和重寫。這個(gè)很簡(jiǎn)單。因?yàn)槎鄳B(tài)就是建立在不同的重寫之上的。也就是說多態(tài)就是在使用著一個(gè)方法的不同重寫

    2024年02月02日
    瀏覽(22)
  • “深入探究JVM:揭秘Java虛擬機(jī)的工作原理“

    標(biāo)題:深入探究JVM:揭秘Java虛擬機(jī)的工作原理 摘要:本文將深入探究Java虛擬機(jī)(JVM)的工作原理,包括JVM的架構(gòu)、內(nèi)存管理、垃圾回收機(jī)制以及即時(shí)編譯等關(guān)鍵概念。通過詳細(xì)解釋這些概念,讀者將能夠更好地理解JVM對(duì)Java程序的執(zhí)行過程。 正文: JVM的架構(gòu) JVM作為Java程序

    2024年02月13日
    瀏覽(36)
  • “深入探究JVM內(nèi)部結(jié)構(gòu)與工作原理:解析Java虛擬機(jī)“

    標(biāo)題:深入探究JVM內(nèi)部結(jié)構(gòu)與工作原理 摘要:本文將深入探究Java虛擬機(jī)(JVM)的內(nèi)部結(jié)構(gòu)與工作原理。我們將介紹JVM的基本組成部分,包括類加載器、運(yùn)行時(shí)數(shù)據(jù)區(qū)和執(zhí)行引擎。同時(shí),我們將通過一個(gè)示例代碼來說明JVM內(nèi)部結(jié)構(gòu)與工作原理的具體應(yīng)用。 介紹: Java虛擬機(jī)(

    2024年02月12日
    瀏覽(25)
  • 【C++進(jìn)階】繼承、多態(tài)的詳解(多態(tài)篇)

    【C++進(jìn)階】繼承、多態(tài)的詳解(多態(tài)篇)

    作者:愛寫代碼的剛子 時(shí)間:2023.8.16 前言:本篇博客主要介紹C++中多態(tài)有關(guān)的知識(shí),是C++中的一大難點(diǎn),剛子將帶你深入C++多態(tài)的知識(shí)。(該博客涉及到的代碼是在x86的環(huán)境下,如果是在x86_64環(huán)境下指針的大小可能需要變成8bytes) 多態(tài)的概念 多態(tài)的概念:通俗來說,就是多

    2024年02月12日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包