c++類和對象有哪些-創(chuàng)新互聯(lián)

c++類和對象有哪些,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的惠山網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

話不多說,我們直接進(jìn)入主題:對象:客觀世界里的一切事物都可以看作是一個(gè)對象,每一個(gè)對象應(yīng)當(dāng)具有屬性(靜態(tài)特征,比如一個(gè)班級,一個(gè)專業(yè),一個(gè)教室)和行為(動(dòng)態(tài)特征,例如:學(xué)習(xí),開會(huì),體育比賽等)兩個(gè)要素。 對象是由一組屬性和一組行為構(gòu)成的。類(class):就是對象的類型,代表了某一批對象的共同特性和特征。類是對象的抽象,而對象是類的具體實(shí)例。

2.1 類的引入

在C語言中我們定義一個(gè)結(jié)構(gòu)體是這樣定義的:

struct Student{  int _age;  char* _Gender;  char* _Name;};int main(){  struct S;  return 0;}

我們都知道,在C中,“數(shù)據(jù)”和“處理數(shù)據(jù)的操作(函數(shù))”是分開的,語言本身并沒有支持“數(shù)據(jù)和函數(shù)”之間的關(guān)聯(lián)性。那么,如果我們要在某種特定情況下讓數(shù)據(jù)和函數(shù)有一定的關(guān)聯(lián),這個(gè)時(shí)候我們應(yīng)該怎么處理呢?先看一個(gè)例子:

很明顯,編譯器報(bào)錯(cuò)了,還很多。也就是說在C語言當(dāng)中是不允許在結(jié)構(gòu)體中定義函數(shù)的,那么在C++中是不是也是這樣呢?

通過對比,我們明顯的發(fā)現(xiàn)C++是可以做到我們想要將數(shù)據(jù)和函數(shù)產(chǎn)生一定關(guān)系的操作的。為了區(qū)別C語言中結(jié)構(gòu)體的定義struct,在C++中我們常用class來代替struct。

2.2 類的定義

#include <iostream>using namespace std;class Student{public:  char* _name;private:  char* _Gender;  int _age;};int main(){  class S;  return 0;}

class是C++中定義類的關(guān)鍵字,Student為類的名字,{}中為類的主體,和結(jié)構(gòu)體類似,在{}后面跟的是;。類中的元素稱為類的成員,類中的數(shù)據(jù)稱為類的屬性或者類的成員變量,類中的函數(shù)稱為類的成員函數(shù)。

類的定義通常有兩種方式:

1、將類的聲明和定義都放在類體中za2、將類的聲明放在.h頭文件中,定義放在.cpp文件中

在代碼中我們看到了private 和 public兩個(gè)沒有見過的東西,接下來我們講一講C++的三大特性:繼承 封裝 多態(tài)封裝:隱藏對象的屬性和現(xiàn)實(shí)細(xì)節(jié),僅對外公開接口和對象進(jìn)行交互,將數(shù)據(jù)和操作數(shù)據(jù)的方法有機(jī)結(jié)合。

這里的public 和 private是C++中的訪問限定符,訪問限定符有三個(gè):public (公有) protected(保護(hù)) private(私有)。在下面的博文中我們會(huì)用到這些限定符,具體情況后續(xù)文章再作介紹,這里讀者只需了解就可。

這里做一些說明:

1、public成員在類外可以直接訪問2、protected和private成員在類外不能夠直接訪問,在這里我們簡單的把他們看成一樣的。(二者區(qū)別就是基類private成員在派生類中是不能被訪問的,如果基類成員不想再類外被訪問,但需要在派生類中能訪問,就定義為protected,后面博文更到派生類時(shí)我們會(huì)再來把這兩個(gè)東西拿出來再講一講)3、他們的作用域從該訪問限定符出現(xiàn)的位置開始直到下一個(gè)訪問限定符出現(xiàn)截止4、class的默認(rèn)訪問權(quán)限是private,而struct默認(rèn)訪問權(quán)限是public(因?yàn)閟truct要兼容C的特點(diǎn))

那么我們?nèi)绾卧陬愅庠L問一個(gè)類中的私有成員變量呢?(面試題)

方法一:在類中添加一個(gè)共有的方法

我們可以看到在public中定義的公有函數(shù)可以在類外訪問私有成員變量,這是訪問的一種方法。

類的作用域

在C語言階段我們知道變量的作用域只有局部域和全局域兩種,而在C++作用域則分為了局部域、全局域、命名空間域和類域四種,前面幾種域相信我們都已將熟悉過,這里我講一下類域。

類定義了一個(gè)新的作用域,類的所有成員都必須處在類的作用域中。形參表和函數(shù)體處于類的作用域中。在類體外定義成員,需要用 :: 作用域解析符指明成員屬于哪一個(gè)類域。在類的作用域外,只能通過對象(或指針)借助成員訪問操作符 . 和->來訪問類成員,跟在訪問操作符后面的名字必須在相關(guān)聯(lián)的類的作用域中。

下面我們看看在代碼中如何實(shí)現(xiàn)上述的意思:

#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;namespace N1  //命名空間域{  int a = 10;}int a = 20;   //全局域void FunTest(){  cout << "FunTest()" << endl;}class Test{public:  void SetA(int a)  {    a = a;      //存在歧義,是變量給變量賦值呢還是形參給變量賦值,或者變量給形參賦值呢?同學(xué)們不要這樣寫     //實(shí)際證明,這里的賦值是形參給形參賦值,結(jié)果并沒有改變變量的值,結(jié)果出了函數(shù)作用域自然是一個(gè)隨機(jī)值 正確寫法: **_a = a;**  }  void PrintA()  {    cout << a << endl;  //cout << _a <<endl;  }private:  int a;         //類域  正確寫法:int _a;};int main(){  int a = 40;       //局部域  Test t;  t.SetA(30);  cout << N1::a << endl;   //打印命名空間域的值  cout << ::a << endl;    //打印全局域的值  cout << a << endl;     //打印局部域的值  t.PrintA();         //打印類域的值  return 0;}

看完這串代碼不知道各位有沒有什么疑惑呢?這里附上這段代碼的結(jié)果:

我們本應(yīng)該想讓編譯器給我們打印出10 20 30 40這幾個(gè)值,結(jié)果最后卻給了我們一個(gè)亂碼,這是為什么呢?細(xì)心的同學(xué)應(yīng)該發(fā)現(xiàn)了,在這里我們定義的所有的變量都是用的同一個(gè)名稱a,這樣的編碼習(xí)慣是極不好的,容易引起誤會(huì),上面就給了一個(gè)反例。

在使用一個(gè)變量時(shí),我們應(yīng)當(dāng)注意必須要先聲明后使用

2.2 類的對象的模型

類對象模型:類中各成員在內(nèi)存中的布局形式。下面我們以代碼形式舉例說明一下:

class Student{public:   void SetStudentInfo(char* name, char* gender, int age)  {    strcpy(_name, name);      strcpy(_gender, gender);    _age = age;        }  void PrintInfo()  {    cout << _name << " " << _gender << " " << _age << endl;  }private:  char _name[20];  char _gender[3];  int _age;};int main(){  Student s1, s2;  cout << sizeof(s1) << endl;  s1.SetStudentInfo("鳴人", "男", 14);  s2.SetStudentInfo("佐助", "男", 14);  return 0;}

既然一個(gè)類有那么多成員和不同的對象,那么它到底是怎么來存儲(chǔ)的呢?

下面給出三種假設(shè):

假設(shè)一

假設(shè)二:

那就剩最后一種假設(shè)了:

顯然。這種假設(shè)才是成立的。

提一個(gè)問題:C++是怎么計(jì)算一個(gè)類的大小的?

我們在程序中驗(yàn)證一下:

class A1{public:  void f1()  {}  void f2()  {}}; class A2{public:  void f1()  {}private:  int a = 10;};class A3{};int main(){  cout << sizeof(A1) << endl;  //1  cout << sizeof(A2) << endl;  //4  cout << sizeof(A3) << endl;  //1  return 0;}

可以看到在有成員變量的時(shí)候得到的值是4,而一個(gè)空類和只有成員函數(shù)的時(shí)候它的值是1,難道是成員函數(shù)的大?。匡@然是不對的,前面我們說過,成員函數(shù)是不占大小的,因此我們可以得出結(jié)論:一個(gè)類的大小,實(shí)際上就是該類中非靜態(tài)成員變量之和,當(dāng)然也要注意內(nèi)存對齊,空類大小值為一(在Linux和VS下面是 1)為什么是一呢?就是為了區(qū)分不同的對象,設(shè)計(jì) 1 是為了 節(jié)省空間

關(guān)于c++類和對象有哪些問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。

網(wǎng)站欄目:c++類和對象有哪些-創(chuàng)新互聯(lián)
鏈接URL:http://muchs.cn/article16/ddpgdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站虛擬主機(jī)、定制開發(fā)網(wǎng)站導(dǎo)航、響應(yīng)式網(wǎng)站網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)