色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

函數結構的定義和例程說明

CHANBAEK ? 來源:明解嵌入式 ? 作者:Sharemaker001 ? 2023-04-19 11:35 ? 次閱讀

一、函數結構定義

在理解拷貝構造函數前,還是有必要回顧下類的構造函數基本概念。 類的構造函數是一種特殊的成員函數,它在創建類的對象時執行。 構造函數的函數名和類名一致,它不會返回任何類型,同樣返回類型也不是void,一般構造函數用來初始化類的成員變量。

class Object
{
   public:
      Object();  // 構造函數
   private:
      Object obj;
};
//構造函數結構定義
Object::Object(void)
{
    obj = 0;
    cout << "Object is init" << endl;
}

拷貝構造函數,又叫做復制構造函數,從字面上看,是通過復制對象的方式創建一個新對象。 因此,它通過編譯器調用實現使用同一個類中之前創建的對象來完成新創建對象的初始化。 其函數結構如下:

Object::Object(const Object& obj)
{
}

拷貝構造函數的形參必須為引用,即參數前加上“&”。 使用引用是因為如果使用傳值的方式將實參傳給形參,中間過程需要經歷一次對象拷貝的過程,對象拷貝又需要調用拷貝構造函數,因此為了防止無限的構造,形成死循環遞歸,拷貝構造函數的形參必須為對象的引用。

拷貝構造函數形參可以是const引用,也可以是非const引用。 但是一般使用const,這樣既能以常量對象(初始化后值不能改變的對象)作為參數去初始化別的對象,也能以非常量對象作為參數去初始化別的對象。

二、例程說明

如果不在類中顯式的聲明一個拷貝構造函數,那么編譯器會自動的為類生成一個拷貝構造函數,自動生成的拷貝構造函數功能簡單,即為新對象復制源對象的所有成員。

#include
using namespace std;
class Object
{
public:
   Object(int a, int b);  //構造函數
   void display();
private:
    int m_a;
    int m_b;
};
Object::Object(int a, int b)
{
    m_a = a;
    m_b = b;
}
void Object::display()
{
    cout<

==

運行結果為:

1,9

可以看出默認的拷貝構造函數功能就是將之前創建的對象成員的值都拷貝給了新對象成員的值。

一般可以顯式的聲明一個拷貝構造函數,如果編寫了拷貝構造函數,那么默認的拷貝構造函數就不存在了,可以在自己編寫的拷貝構造函數中增加自定義內容。

#include
using namespace std;
class Object
{
public:
   Object(int a, int b);  //構造函數
   Object(const Object& obj); //拷貝構造函數
   void display();
private:
    int m_a;
    int m_b;
};
Object::Object(int a, int b)
{
    m_a = a;
    m_b = b;
    cout<<"copy function init"<

運行結果為:

copy function init
1,9

可以看出自己編寫的拷貝構造函數不僅將之前創建的對象成員的值都拷貝給了新對象成員的值,而且輸出自定義的打印內容。

三、應用場景

一般來說,拷貝函數被調用有這樣幾種基本場景:

(1)、通過使用同一個類中已有的對象來初始化新創建的對象。

Object obj2(obj1);   //用拷貝構造函數初始化obj2 
Object obj3 = obj1;  //用拷貝構造函數初始化obj3

(2)、復制對象把它作為參數傳遞給函數。

#include
using namespace std;
class Object 
{
public:
   Object(int a);  //構造函數
   Object(const Object& obj); //拷貝構造函數
public:
    int m_a;
};
Object(int a) 
{ 
    m_a = a; 
};
Object(const Object& obj) 
{
    m_a = obj.m_a;
    cout<<"copy function init"<

運行結果為:

copy function init

可以看出,Fun()函數的形參obj在初始化時調用了復制構造函數。 即作為形參的對象,是用復制構造函數初始化的,而調用復制構造函數時的參數,就是調用Fun()函數時所傳遞的實參obj1。

(3)、復制對象并從函數返回這個對象。

#include
using namespace std;
class Object 
{
public:
   Object(int a);  //構造函數
   Object(const Object& obj); //拷貝構造函數
public:
    int m_a;
};
Object(int a) 
{ 
    m_a = a; 
};
Object(const Object& obj) 
{
    m_a = obj.m_a;
    cout<<"copy function init"<

運行結果為:

copy function init
1

可以看出,調用的Fun()函數,它的返回值是一個對象,該對象就是用復制構造函數初始化的, 即調用復制構造函數時,復制構造函數時的實參,就是Fun()函數return語句所返回的對象。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4345

    瀏覽量

    62879
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49240
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28445
  • void
    +關注

    關注

    0

    文章

    23

    瀏覽量

    9891
  • CONST
    +關注

    關注

    0

    文章

    45

    瀏覽量

    8180
收藏 人收藏

    評論

    相關推薦

    隊列相關素材(函數定義以及例程

    隊列相關素材(函數定義以及例程)分享
    發表于 03-23 20:27

    PICC庫函數說明(共43頁pdf)

    目的進行敘述性描述。 例程:給出一個能說明函數的應用例子。 數據類型:列出函數中使用的一些特殊的數據類型(如結構體等)的C語言
    發表于 07-03 01:52

    基于SYS/BIOS以太網例程中幾個函數在哪兒定義

    找不到這幾個函數的使用說明,根據函數的名字,我想應該在EMAC/MDIO CSL layer函數中,但是根據sprufp2a.pdf也沒有找到相關的
    發表于 08-27 08:35

    例程拷貝中斷函數沒被定義

    EMIF_AD7606V2例程中的lcd.c程序中是這樣的,但是我將這個lcd.c程序復制到另一個例程中就變成,里面的中斷函數都變成沒有顏色的,也就是沒被定義,我想問一下,問題出在哪里
    發表于 11-06 12:31

    EMIF_AD7606例程中一個函數怎么找到函數定義

    EMIF_AD7606例程中一個函數找不到函數定義呢?如何找到啊?
    發表于 03-24 10:59

    如何定義結構體?

    什么是結構體,如何定義結構體? 溫馨提示: 請從以下鏈接中的帖子學習相關內容并進行回答,其他地方得到的答案不能作為標準答案,僅能做為補充說明,七天之內答案不可見,答題的童鞋有七天
    發表于 05-08 05:55

    函數定義是什么

    函數定義函數定義就是函數體的實現編寫函數存根,為尚未編寫好的代碼占好位置,可以保持程序在
    發表于 12-17 07:03

    UCOS擴展例程-UCOSIII空閑任務鉤子函數的使用

    UCOS擴展例程-UCOSIII空閑任務鉤子函數的使用
    發表于 12-14 17:24 ?31次下載

    Arduino程序結構及基本函數的詳細資料說明

    本文檔的主要內容詳細介紹的是Arduino程序結構及基本函數的詳細資料說明
    發表于 06-17 17:44 ?7次下載
    Arduino程序<b class='flag-5'>結構</b>及基本<b class='flag-5'>函數</b>的詳細資料<b class='flag-5'>說明</b>

    模數轉換器ADC的應用和函數定義等資料說明

    本文檔的主要內容詳細介紹的是模數轉換器ADC的應用和函數定義等資料說明
    發表于 05-28 17:29 ?19次下載
    模數轉換器ADC的應用和<b class='flag-5'>函數</b><b class='flag-5'>定義</b>等資料<b class='flag-5'>說明</b>

    C語言函數的實驗詳細資料說明

    實驗目的和要求(1)掌握C語言函數定義方法、函數的聲明及函數的調用方法。(2)掌握函數實參和形參的對應關系以及“值傳遞”的方式。(3)掌握
    發表于 12-06 08:00 ?4次下載
    C語言<b class='flag-5'>函數</b>的實驗詳細資料<b class='flag-5'>說明</b>

    STM32 之 標準外設版USB驅動庫詳解(架構+文件+函數+使用說明+示例程序)

    STM32 之 標準外設版USB驅動庫詳解(架構+文件+函數+使用說明+示例程序)
    發表于 12-08 20:36 ?0次下載
    STM32 之 標準外設版USB驅動庫詳解(架構+文件+<b class='flag-5'>函數</b>+使用<b class='flag-5'>說明</b>+示<b class='flag-5'>例程</b>序)

    C語言里函數定義、子函數的使用及變量的作用域

    這篇介紹C語言里函數定義、子函數的使用。接著介紹變量的作用域,定義全局變量、靜態變量、只讀變量、變量初始化等等。
    的頭像 發表于 04-28 11:23 ?6996次閱讀

    python定義函數與調用函數的順序

    定義函數與調用函數的順序 函數定義后,本身是不會自動執行的,只有在被調用后,函數才會被執行,得
    的頭像 發表于 10-04 17:17 ?1497次閱讀

    python如何定義一個函數

    ()。但你也可以自己創建函數,這被叫做用戶自定義函數。 二、定義一個函數 你可以定義一個由自己想
    的頭像 發表于 11-14 11:26 ?752次閱讀
    主站蜘蛛池模板: 涩涩免费视频软件 | 免费果冻传媒2021在线看 | 亚洲国产AV一区二区三区四区 | 久久精品观看影院2828 | 日韩一级精品久久久久 | 亚洲一区在线播放 | av av在线 | 最新 国产 精品 精品 视频 | 性白俄罗斯高清xxxxx | 小sao货ji巴cao死你视频 | 亚洲精品第五页中文字幕 | 国产女高清在线看免费观看 | 欧美手机在线 | 国产在线高清亚洲精品一区 | 村妇偷人内射高潮迭起 | 一二三四在线视频社区8 | 女人麻豆国产香蕉久久精品 | 国产成人高清亚洲一区app | 岛国大片在线播放免费 | 一个人的免费完整在线观看HD | 亚州免费一级毛片 | 国产人妖一区二区 | 九九这里有精品 | HEYZO无码中文字幕人妻 | 思思久99久女女精品 | 美女扒开腿让男人桶个爽 | 手机在线播放成人亚洲影院电影 | 嫩草影院未满十八岁禁止入内 | 97成人免费视频 | 99视频在线精品免费观看18 | 中文字幕视频在线免费观看 | 久久国内精品视频 | 嫩交18xxxx| 亚洲精品成人A8198A片漫画 | 国产露脸无码A区久久 | 东北女人奶大毛多水多 | 欧洲最大无人区免费高清完整版 | 俄罗斯破处 | 国产69精品久久久久乱码免费 | 99久久全国免费久久爱 | a一级一片免费观看视频 |