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

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

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

3天內不再提示

類的申明和成員函數定義分離是什么

汽車電子技術 ? 來源:C語言Plus ? 作者:Maye426 ? 2023-02-27 15:33 ? 次閱讀

前面我們學習了如何定義類,以及如何使用類的成員,在前面我們把成員函數都定義在了類的內部,接下來我們學習,如何把類的定義和成員函數的實現分離。

在面向對象的程序開發中,一般做法是將類的聲明(其中包含成員函數的聲明)放在指定的頭文件中,用戶如果想用該類,只要把有關的頭文件包含進來即可,不必在程序中重復書寫類的聲明,以減少工作量,節省篇幅,提高編程的效率。

由于在頭文件中包含了類的聲明,因此在程序中就可以用該類來定義對象。由于在類體中包含了對成員函數的聲明,在程序中就可以調用這些對象的公用成員函數。為了實現上一節所敘述的信息隱蔽,對類成員函數的定義一般不放在頭文件中,而另外放在一個文件中。例如,可以分別寫兩個文件:

Student.h 這是頭文件,在此文僅重進行類的聲明

#pragma once
 #include
 #include
 #include
 #include
 using namespace std;
 class Student
 {
   private:
   int id;
   int age;
   char name[10];
   public:
   void init(int sid = 0, int sage = 0, const char* sname = "NULL");
   void showStuInfo();
 };

Student.cpp 這是源文件,類的所有函數都在此文件中實現

#include "Student.h"
 void Student::init(int sid, int sage, const char* sname)
 {
   id = sid;
   age = sage;
   strcpy(name, sname);
 }
 void Student::showStuInfo()
 {
   cout << id << " " << age << " " << name << endl;
 }

為了組成一個完整的源程序,還應當有包括主函數的源文件:

#include"Student.h"//講類聲明頭文件包含進來
 int main()
{
     Student cPlus;//定義對象
     cPlus.init(111,20,"C語言Plus");
     cPlus.showStuInfo();

     return 0;
 }

類的申明和成員函數定義分離注意問題

  • 和寫在里面一樣,但是需要指定作用域,在外面的函數名前面加上類名,形如【類名::函數名】 :: 雙冒號是作用域限定符
  • 如果函數參數有默認參數,那么聲明和實現不能同時存在默認參數,建議保留聲明中的默認參數,讓用戶看到

如果一個Student.h同時被多個文件調用,每次都要對包含成員函數定義的源文件(如上面的student.cpp)進行編譯,這是否可以改進呢?的確,可以不必每次都對它重復進行編譯,而只需編譯一次即可。把第一次編譯后所形成的目標文件保存起來,以后在需要時把它調出來直接與程序的目標文件相連接即可。這和使用函數庫中的函數是類似的。這也是把成員函數的定義不放在頭文件中的一個好處。(靜態庫,以后會講)

在實際工作中,并不是將一個類聲明做成一個頭文件,而是將若干個常用的功能相近的類聲明集中在一起,形成類庫。類庫有兩種:

  • C++編譯系統提供的標準類庫;
  • 用戶根據自己的需要做成的用戶類庫,提供給自己和自己授權的人使用,這稱為自定義類庫。

在程序開發工作中,類庫是很有用的,它可以減少用戶自己對類和成員函數進行定義的工作量。

類庫包括兩個組成部分:

  • 類聲明頭文件;
  • 已經過編譯的成員函數的定義,它是目標文件。

用戶只需把類庫裝入到自己的計算機系統中(一般裝到C++編譯系統所在的子目錄下),并在程序中用#include命令行將有關的類聲明的頭文件包含到程序中,就可以使用這些類和其中的成員函數,順利地運行程序。這和在程序中使用C++系統提供的標準函數的方法是一樣的,例如用戶在調用sin函數時只需將包含聲明此函數的頭文件包含到程序中,即可調用該庫函數,而不必了解sin函數是怎么實現的(函數值是怎樣計算出來的)。

當然,前提是系統已裝了標準函數庫。在用戶源文件經過編譯后,與系統庫(是目標文件)相連接。在用戶程序中包含類聲明頭文件,類聲明頭文件就成為用戶使用類的公用接口,在頭文件的類體中還提供了成員函數的函數原型聲明,用戶只有通過頭文件才能使用有關的類。用戶看得見和接觸到的是這個頭文件,任何要使用這個類的用戶只需包含這個頭文件即可。包含成員函數定義的文件就是類的實現。

請特別注意:類聲明和函數定義一般是分別放在兩個文本中的。由于要求接口與實現分離,為軟件開發商向用戶提供類庫創造了很好的條件。

開發商把用戶所需的各種類的聲明按類放在不同的頭文件中,同時對包含成員函數定義的源文件進行編譯,得到成員函數定義的目標代碼。軟件商向用戶提供這些頭文件和類的實現的目標代碼(不提供函數定義的源代碼)。用戶在使用類庫中的類時,只需將有關頭文件包含到自己的程序中,并且在編譯后連接成員函數定義的目標代碼即可。

由于類庫的出現,用戶可以像使用零件一樣方便地使用在實踐中積累的通用的或專用的類,這就大大減少了程序設計的工作量,有效地提高了工作效率。

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

    關注

    0

    文章

    9

    瀏覽量

    18877
  • 函數
    +關注

    關注

    3

    文章

    4345

    瀏覽量

    62867
  • 定義
    +關注

    關注

    0

    文章

    10

    瀏覽量

    14351
收藏 人收藏

    評論

    相關推薦

    強大的matlab:在中實現static成員變量 (轉帖)

    。static成員函數在不創建對象的時候直接調用。很不幸的是MATLAB不支持static成員變量,只能定義static
    發表于 03-07 10:42

    為labview創建自定義探針

    通過自定義探針來訪問需要訪問的LabVIEW成員vi信息,廢話不說直接寫原理過程:1. 創建一個demo.Lvproj2. Write data為成員vi3.上圖為main.vi4.
    發表于 03-22 10:32

    函數申明是int而不是void

    如下是定時中斷的主函數,為什么函數申明是int,而不是void呢?沒有返回值啊! int main(void){ Stm32_Clock_Init(9); //系統時鐘設置 delay_init
    發表于 04-02 00:00

    vc的常用成員函數

    CRect:用來表示矩形的,擁有四個成員變量:top left bottom right。分別表是左上角和右下角的坐標。可以通過以下的方法構造:
    發表于 08-02 06:33

    成員函數中const的使用,有什么注意事項?

    成員函數中const的使用,有什么注意事項?
    發表于 04-26 06:42

    成員函數與普通函數的區別研究

    本文的目的是研究成員函數與普通函數之區別,以及不同調用方式之間的區別,進而通過內聯匯編語句模仿特定的調用,從而完成通過普通函數指針調用
    發表于 09-15 14:52 ?32次下載

    內聯函數詳解

    什么是內聯性和外聯函數 成員函數可以分為內聯函數和外聯函數。內聯
    發表于 11-02 14:05 ?0次下載

    如何在CAA中定義全局函數

    如果在編譯時出現使用了未定義ExportedByGlobal的錯誤,是因為在全局函數所在的的頭文件中沒有包含Global.h,其中Global是全局
    發表于 04-03 14:24 ?8次下載

    EE-128:C++中的DSP:從C++調用匯編成員函數

    EE-128:C++中的DSP:從C++調用匯編成員函數
    發表于 04-16 17:04 ?2次下載
    EE-128:C++中的DSP:從C++調用匯編<b class='flag-5'>類</b><b class='flag-5'>成員</b><b class='flag-5'>函數</b>

    2.10 學生-構造函數 (15分)

    10 學生-構造函數 (15分)定義一個有關學生的Student,內含成員變量: Stri
    發表于 12-29 19:05 ?1次下載
    2.10 學生<b class='flag-5'>類</b>-構造<b class='flag-5'>函數</b> (15分)

    QObject中常使用的成員函數和重要宏定義

    每個對象都有一個objectName(),可以通過相應的metaObject()找到它的名(函數:QMetaObject::className())。在實際開發中可以使用inherits()函數確定對象的
    的頭像 發表于 02-20 09:42 ?1478次閱讀

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

    在理解拷貝構造函數前,還是有必要回顧下的構造函數基本概念。的構造函數是一種特殊的成員
    的頭像 發表于 04-19 11:35 ?1077次閱讀

    C++11新的功能(特殊成員函數、override和final)

    C++11在原有的4個特殊成員函數(默認構造函數、復制構造函數、復制賦值運算符和析構函數)的基礎上新增了移動構造
    的頭像 發表于 07-18 16:02 ?526次閱讀

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

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

    EE-128:C語言中的DSP:從C調用匯編成員函數

    電子發燒友網站提供《EE-128:C語言中的DSP:從C調用匯編成員函數.pdf》資料免費下載
    發表于 01-07 13:48 ?0次下載
    EE-128:C語言中的DSP:從C調用匯編<b class='flag-5'>類</b><b class='flag-5'>成員</b><b class='flag-5'>函數</b>
    主站蜘蛛池模板: 久草青青在线| Chinesetube国产中文| 伦理片97影视网| 国产Av男人的天堂精品良久| 一道本无吗d d在线播放| 热久久视久久精品2015| 鸡鸡插屁股| 国产爱豆果冻传媒在线观看视频| 中国女人内谢69xxxxxx直播 | 双性h浪荡受bl| 美女爱爱网站| 国精产品砖一区二区三区糖心| 白丝高中生被c爽哭| 24小时日本在线| 野花日本大全免费观看3中文版| 天美传媒 免费观看| 琪琪see色原网色原网站| 久久青青草视频在线观| 国产亚洲精品久久久久久鸭绿欲| 大陆女人内谢69XXXORG| OLDMAN老头456 TUBE| 91精品在线国产| 一级做a爰片久久免费| 亚洲精品国产拍在线观看 | 啪啪羞羞GIF男女0OXX动态图| 久久一er精这里有精品| 韩国伦理三级| 国产午夜精AV在线麻豆| 国产精品A久久久久久久久| 成人中文字幕在线| 把腿张开再深点好爽宝贝| 99久久爱看免费观看| 2021国产精品久久久久精品免费网| 亚洲视频在线观看网站| 亚洲精品123区在线观看| 午夜性伦鲁啊鲁免费视频| 天美传媒MV高清免费看| 日韩高清在线亚洲专区| 日本理伦片午夜理伦片| 欧美午夜不卡在线观看| 欧洲兽交另类AVXXX|