最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++ 類和對(duì)象總結(jié)

 更新時(shí)間:2020年01月30日 21:20:17   作者:熊二不二  
這篇文章主要介紹了c++ 類和對(duì)象總結(jié)一,需要的朋友可以參考下

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

2.1 類的引入

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

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

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

這里寫圖片描述 

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

這里寫圖片描述 

通過(guò)對(duì)比,我們明顯的發(fā)現(xiàn)C++是可以做到我們想要將數(shù)據(jù)和函數(shù)產(chǎn)生一定關(guān)系的操作的。
為了區(qū)別C語(yǔ)言中結(jié)構(gòu)體的定義struct,在C++中我們常用class來(lái)代替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、將類的聲明和定義都放在類體中za
2、將類的聲明放在.h頭文件中,定義放在.cpp文件中

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

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

這里做一些說(shuō)明:

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

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

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

這里寫圖片描述 

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

類的作用域

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

類定義了一個(gè)新的作用域,類的所有成員都必須處在類的作用域中。形參表和函數(shù)體處于類的作用域中。在類體外定義成員,需要用 :: 作用域解析符指明成員屬于哪一個(gè)類域。在類的作用域外,只能通過(guò)對(duì)象(或指針)借助成員訪問(wèn)操作符 . 和->來(lái)訪問(wèn)類成員,跟在訪問(wèn)操作符后面的名字必須在相關(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é)果并沒(méi)有改變變量的值,結(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;
}

看完這串代碼不知道各位有沒(méi)有什么疑惑呢?
這里附上這段代碼的結(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 類的對(duì)象的模型

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

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è)類有那么多成員和不同的對(duì)象,那么它到底是怎么來(lái)存儲(chǔ)的呢?

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

假設(shè)一

這里寫圖片描述

假設(shè)二:

這里寫圖片描述

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

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

這里寫圖片描述

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

我們?cè)诔绦蛑序?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ù)的大小?
顯然是不對(duì)的,前面我們說(shuō)過(guò),成員函數(shù)是不占大小的,因此我們可以得出結(jié)論:一個(gè)類的大小,實(shí)際上就是該類中非靜態(tài)成員變量之和,當(dāng)然也要注意內(nèi)存對(duì)齊,空類大小值為一(在Linux和VS下面是 1)
為什么是一呢?
就是為了區(qū)分不同的對(duì)象,設(shè)計(jì) 1 是為了 節(jié)省空間

相關(guān)文章

  • 輸入一個(gè)字符串,取出其中的整數(shù)(實(shí)現(xiàn)代碼)

    輸入一個(gè)字符串,取出其中的整數(shù)(實(shí)現(xiàn)代碼)

    輸入一個(gè)字符串,內(nèi)含所有數(shù)字和非數(shù)字字符。將其中連續(xù)的數(shù)字作為一個(gè)整數(shù),依次存放到一個(gè)數(shù)組中,統(tǒng)計(jì)共有多少個(gè)整數(shù),并輸出這些數(shù)
    2013-09-09
  • C語(yǔ)言繪制三角函數(shù)曲線

    C語(yǔ)言繪制三角函數(shù)曲線

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言繪制三角函數(shù)曲線,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 一篇文章徹底弄懂C++虛函數(shù)的實(shí)現(xiàn)機(jī)制

    一篇文章徹底弄懂C++虛函數(shù)的實(shí)現(xiàn)機(jī)制

    C++中的虛函數(shù)的作用主要是實(shí)現(xiàn)了多態(tài)的機(jī)制,基類定義虛函數(shù),子類可以重寫該函數(shù),在派生類中對(duì)基類定義的虛函數(shù)進(jìn)行重寫時(shí),需要在派生類中聲明該方法為虛方法,這篇文章主要給大家介紹了關(guān)于如何通過(guò)一篇文章徹底弄懂C++虛函數(shù)的實(shí)現(xiàn)機(jī)制,需要的朋友可以參考下
    2021-06-06
  • Qt使用QListWidget實(shí)現(xiàn)自定義Item

    Qt使用QListWidget實(shí)現(xiàn)自定義Item

    這篇文章主要為大家詳細(xì)介紹了Qt如何使用QListWidget實(shí)現(xiàn)自定義Item的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • C++二分查找在搜索引擎多文檔求交的應(yīng)用分析

    C++二分查找在搜索引擎多文檔求交的應(yīng)用分析

    這篇文章主要介紹了C++二分查找在搜索引擎多文檔求交的應(yīng)用,實(shí)例分析了二分查找的原理與C++的實(shí)現(xiàn)及應(yīng)用技巧,需要的朋友可以參考下
    2015-06-06
  • C++中常見(jiàn)容器類的使用方法詳解(vector/deque/map/set)

    C++中常見(jiàn)容器類的使用方法詳解(vector/deque/map/set)

    C++中常見(jiàn)的容器類有vector、list、deque、map、set、unordered_map和unordered_set。下面將舉例直接說(shuō)明各個(gè)容器的使用方法,希望對(duì)大家有所幫助
    2023-03-03
  • C++虛函數(shù)表與類的內(nèi)存分布深入分析理解

    C++虛函數(shù)表與類的內(nèi)存分布深入分析理解

    對(duì)C++ 了解的人都應(yīng)該知道虛函數(shù)(Virtual Function)是通過(guò)一張?zhí)摵瘮?shù)表(Virtual Table)來(lái)實(shí)現(xiàn)的。簡(jiǎn)稱為V-Table。本文就將詳細(xì)講講虛函數(shù)表的原理與使用,需要的可以參考一下
    2022-08-08
  • C++11?中的override詳解

    C++11?中的override詳解

    這篇文章主要介紹了C++11?中的override詳解,本文以重寫虛函數(shù)時(shí),容易犯的四個(gè)錯(cuò)誤為例,結(jié)合示例代碼給大家詳細(xì)介紹,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • visual studio 建立dll類型工程、控制臺(tái)程序

    visual studio 建立dll類型工程、控制臺(tái)程序

    這篇文章主要介紹了visual studio 建立dll、控制臺(tái)類型工程的相關(guān)知識(shí),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • C語(yǔ)言制作貪吃蛇小游戲

    C語(yǔ)言制作貪吃蛇小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言制作貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評(píng)論

寻甸| 塔城市| 大足县| 虹口区| 习水县| 监利县| 明星| 辽中县| 濉溪县| 丽水市| 江西省| 台湾省| 玛多县| 巴东县| 闻喜县| 雷州市| 体育| 普洱| 仁怀市| 霍城县| 桂林市| 贺兰县| 拜泉县| 通渭县| 辽中县| 阳江市| 介休市| 开原市| 天门市| 普兰县| 潍坊市| 浏阳市| 大港区| 静宁县| 五河县| 叙永县| 西吉县| 灵石县| 苗栗县| 定州市| 北宁市|