日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

(二)C++头文件与类的声明

發(fā)布時(shí)間:2023/12/14 c/c++ 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (二)C++头文件与类的声明 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一、C vs C++,關(guān)于數(shù)據(jù)和函數(shù)

二、class分類

2.1 complex(經(jīng)典不帶指針--復(fù)數(shù))

?2.2 string(經(jīng)典帶指針--字符串)

三、Object Based(基于對(duì)象)vs Object Oriented(面向?qū)ο?#xff09;

四、C++ programs代碼基本形式

五、Output(輸出區(qū)別),C++ vs C

六、Header(頭文件)當(dāng)中的防衛(wèi)式聲明與布局

6.1 guard(防衛(wèi)式聲明)

6.2 Header(頭文件)的布局

6.1.1 class 的聲明(declaration)

6.1.2 class template(模板)簡(jiǎn)介


一、C vs C++,關(guān)于數(shù)據(jù)和函數(shù)

????????在C語(yǔ)言中,設(shè)計(jì)程序時(shí),需要準(zhǔn)備數(shù)據(jù)Data與函數(shù)Functions,函數(shù)是用來(lái)處理數(shù)據(jù),那么這個(gè)數(shù)據(jù)Data會(huì)有很多類型(built-in內(nèi)置、struct結(jié)構(gòu)體),Data數(shù)據(jù)根據(jù)類型創(chuàng)建許多真值數(shù)據(jù)variables。這樣的缺點(diǎn)是由于語(yǔ)言沒(méi)有提供足夠的關(guān)鍵字,variables數(shù)據(jù)一定是全局的,對(duì)于所有Functions都可以處理variables,對(duì)后續(xù)有影響。

????????于是發(fā)展到了C++面向?qū)ο蟮恼Z(yǔ)言中,將數(shù)據(jù)Date Membres與Members Function進(jìn)行綁定,稱為class,相當(dāng)于C中的struct結(jié)構(gòu)體,但是多了很多新特性,即只有對(duì)應(yīng)的Members Function函數(shù)可以處理Data Members數(shù)據(jù),優(yōu)點(diǎn)是不會(huì)進(jìn)行混雜。Data Membres與Members Function綁定后,根據(jù)這些class,以這種形式,創(chuàng)建了很多的objects(對(duì)象),在objects中進(jìn)行處理。

二、class分類

? ? ? ? 在上一章中我們說(shuō),最經(jīng)典的class分類為不帶指針的與帶指針的,這里面最經(jīng)典的兩個(gè)分別是complex(復(fù)數(shù))與string(字符串)。

2.1 complex(經(jīng)典不帶指針--復(fù)數(shù))

????????complex有實(shí)部與虛部之分,那么根據(jù)complex創(chuàng)建出來(lái)的c1、c2……中每個(gè)都含有實(shí)部與虛部,這就是在內(nèi)存中占用的大小。在設(shè)計(jì)復(fù)數(shù)中還需要設(shè)計(jì)包含黃色的Functions,來(lái)處理c1、c2……,即一類函數(shù)處理多個(gè)數(shù)據(jù)。

? ? ? ? complex中把Date與Functions包含在一起,說(shuō)數(shù)據(jù)有很多個(gè)但函數(shù)只有一類,這個(gè)原因會(huì)在后面講到。

complex c1(2,1); complex c2; complex* pc = new complex(0,1);

?2.2 string(經(jīng)典帶指針--字符串)

? ? ? ? 特別在于,對(duì)“Hello World”這類字符串,實(shí)際上其中只有一根指針(ptr),那么ptr要在內(nèi)存中指出這個(gè)字符串,這個(gè)字符串(內(nèi)容、即"Hello World")在另外設(shè)計(jì)這個(gè)類的內(nèi)存中,分配空間存儲(chǔ)這個(gè)字符串(內(nèi)容)。

? ? ? ? 所以創(chuàng)建出來(lái)的s1、s2……,這些字符串所占用的內(nèi)存大小中,實(shí)際上只有一個(gè)ptr。

string s1("Hello"); string s2("World"); string* ps = new string;

代碼中創(chuàng)建方式是不同的,后續(xù)會(huì)說(shuō)到

三、Object Based(基于對(duì)象)vs Object Oriented(面向?qū)ο?#xff09;

Object Based:面對(duì)的是單一class的設(shè)計(jì)

????????omplex(復(fù)數(shù))--Class without pointer member(s))

Object Oriented:面對(duì)的是多重classes的設(shè)計(jì),classes和classes之間的聯(lián)系。

? ? ? ? string(字符串)--Class with pointer member(s)

四、C++ programs代碼基本形式

????????在一個(gè)C++ programs中,包含一個(gè)頭文件、主程序、標(biāo)準(zhǔn)庫(kù)(當(dāng)然這么分并不是很準(zhǔn)確但可以這里理解)。

? ? ? ? 主程序使用頭文件,使用include"---",使用標(biāo)準(zhǔn)庫(kù),使用include<--->。頭文件和標(biāo)準(zhǔn)庫(kù)都為.h文件,對(duì)聲明和標(biāo)準(zhǔn)庫(kù)的區(qū)別就是雙引號(hào)和尖括號(hào)的區(qū)別。

? ? ? ? 對(duì)于文件名,或者說(shuō)延伸的文件名(extension file name)可能不會(huì)是.h / .cpp的后綴,可能是.hpp或其他的,甚至無(wú)延伸的文件名。

五、Output(輸出區(qū)別),C++ vs C

? ? ? ? 在C 中使用#include<cstdio>或者#include <stdio.h>

#include <stdio.h>int main() {int i = 7;printf("i=%d \n" , i);return 0; }

? ? ? ? 在C++中有更好的方法,#include <iostream.h>或者#include <iostream>,輸出中cout使用的更加自然

#include <iostream.h> using namespace std;int main() {int i = 7;cout << "i=" << i << endl;return 0; }

六、Header(頭文件)當(dāng)中的防衛(wèi)式聲明與布局

6.1 guard(防衛(wèi)式聲明)

? ? ? ? 對(duì)complex.h中,有嚴(yán)格的頭文件寫(xiě)法,我們說(shuō)很多程序要用到這個(gè)聲明文件,或者說(shuō)自己用到,那么include中為了忽略次序引用,所以說(shuō)寫(xiě)一個(gè)guard(防衛(wèi)式聲明)。第二次進(jìn)行include時(shí)不會(huì)做多余的動(dòng)作。

????????(程序內(nèi)容不做詳細(xì)說(shuō)明,只說(shuō)COMPLEX是自己定義的)

#ifndef __COMPLEX__ #difine __COMPLEX__------------------ - - - - - - -······ - - - - - ------------------#endif

????????那么在下列的以complex-test.h中,實(shí)際上對(duì)復(fù)數(shù)進(jìn)行的操作,就是中間主體部分,即“--------”之間的內(nèi)容。

#include <iostream> #include "complex.h" using namespace std;int main() {complex c1(2,1);complex c2;cout << c1 << endl;cout << c2 << endl;c2 = c1 + 5;c2 = 7 + c1;c2 = c1 + c2;.......return 0; }

6.2 Header(頭文件)的布局

在一個(gè)基本的complex.h中,具體是以下布局

其中開(kāi)始的第一段“--------”到“-----------”為forward declarations(前置聲明)

第二段中為class declarations(類-聲明)重要

第三段中為class definition(類-定義)重要

#ifndef __COMPLEX__ #difine __COMPLEX__---------------------------------------------------- #include <cmath>class ostream; class complex;complex&__doapl (complex* ths, const complex& r); ------------------------------------------------------------------------------------------------------ class complex { ....... }; ------------------------------------------------------------------------------------------------------ complex::function... ---------------------------------------------------#endif

6.1.1 class 的聲明(declaration)

class complex { public:explicit complex(double r = 0,double i = 0): re (r), im (i){ }complex& operator += (const complex&);double real () const { return re;}double imag () const {return im;}private:double re , im;friend complex& __doapl (complex* , const complex&); };

? ? ? ? 在下列程序中,任何一個(gè)class都有class hand,在下方中第一個(gè)“ {? } ”中為class body。在class body中設(shè)計(jì)complex應(yīng)該是什么樣的數(shù)據(jù),是怎么樣的函數(shù),來(lái)滿足使用要求。

private:double re , im;

? ? ? ? 這里是Data,上面就是就是Data的函數(shù),后續(xù)講到。friend為在設(shè)計(jì)另一類、單元、函數(shù)與現(xiàn)在的關(guān)系。

6.1.2 class template(模板)簡(jiǎn)介

????????在復(fù)數(shù)中最重要的是里面該有什么樣的信息,即有實(shí)部與虛部,代碼中為double re , im;

即實(shí)部re,虛部im都為double值,假如設(shè)計(jì)為浮點(diǎn)數(shù),整數(shù),那么需要再寫(xiě)一個(gè)class complex 將private:部分的double改為float/int,其余同理,只是類型不同而已。所以這里引出一個(gè)模板

? ? ? ? 這里我們不將數(shù)據(jù)實(shí)部虛部類型寫(xiě)死,而是T(只是一個(gè)符號(hào))類,告訴編譯器,類型未定,則第一行寫(xiě)template<typename T>,為一個(gè)typename。

template<typename T> class complex { public:explicit complex(double r = 0,double i = 0): re (r), im (i){ }complex& operator += (const complex&);double real () const { return re;}double imag () const {return im;}private:T re , im;friend complex& __doapl (complex* , const complex&); };

? ? ? ? 那么使用的時(shí)候再指定,寫(xiě)法如下:

{complex<double> c1(2.5 , 1.5);complex<int> c2(2 , 6);…… }

? ? ? ? 但我們?cè)诤罄m(xù)寫(xiě)的時(shí)候依舊不會(huì)用到模板。


下一章:(三)C++構(gòu)造函數(shù)

總結(jié)

以上是生活随笔為你收集整理的(二)C++头文件与类的声明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。