亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++數(shù)據(jù)封裝以及定義結(jié)構(gòu)的詳細(xì)講解

 更新時間:2023年05月15日 10:51:22   作者:阿玥的小東東  
這篇文章主要詳細(xì)講解了C++數(shù)據(jù)封裝以及定義結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

先介紹一個字符串比較函數(shù):strcmp(s1,s2),當(dāng)s1<s2時,返回一個負(fù)整數(shù);當(dāng)s1=s2時,返回值為0;當(dāng)s1>s2時,返回一個正整數(shù)
還有一個字符串復(fù)制函數(shù):strcpy(a,b),表示將字符串b的值復(fù)制給字符串a(chǎn)當(dāng)然字符串b的長度不能超過字符串a(chǎn)

定義結(jié)構(gòu)

為了定義結(jié)構(gòu),您必須使用 struct 語句。struct 語句定義了一個包含多個成員的新的數(shù)據(jù)類型,struct 語句的格式如下:

struct type_name {
member_type1 member_name1;
member_type2 member_name2;
member_type3 member_name3;
.
.
} object_names;

type_name 是結(jié)構(gòu)體類型的名稱,member_type1 member_name1 是標(biāo)準(zhǔn)的變量定義,比如 int i; 或者 float f; 或者其他有效的變量定義。在結(jié)構(gòu)定義的末尾,最后一個分號之前,您可以指定一個或多個結(jié)構(gòu)變量,這是可選的。下面是聲明一個結(jié)構(gòu)體類型 Books,變量為 book:

struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
} book;

訪問結(jié)構(gòu)成員

為了訪問結(jié)構(gòu)的成員,我們使用成員訪問運算符(.)。成員訪問運算符是結(jié)構(gòu)變量名稱和我們要訪問的結(jié)構(gòu)成員之間的一個句號。

下面的實例演示了結(jié)構(gòu)的用法:

#include <iostream>
#include <cstring>
 
using namespace std;
 
// 聲明一個結(jié)構(gòu)體類型 Books 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
int main( )
{
   Books Book1;        // 定義結(jié)構(gòu)體類型 Books 的變量 Book1
   Books Book2;        // 定義結(jié)構(gòu)體類型 Books 的變量 Book2
 
   // Book1 詳述
   strcpy( Book1.title, "C++ 教程");
   strcpy( Book1.author, "Runoob"); 
   strcpy( Book1.subject, "編程語言");
   Book1.book_id = 12345;
 
   // Book2 詳述
   strcpy( Book2.title, "CSS 教程");
   strcpy( Book2.author, "Runoob");
   strcpy( Book2.subject, "前端技術(shù)");
   Book2.book_id = 1234556;
 
   // 輸出 Book1 信息
   cout << "第一本書標(biāo)題 : " << Book1.title <<endl;
   cout << "第一本書作者 : " << Book1.author <<endl;
   cout << "第一本書類目 : " << Book1.subject <<endl;
   cout << "第一本書 ID : " << Book1.book_id <<endl;
 
   // 輸出 Book2 信息
   cout << "第二本書標(biāo)題 : " << Book2.title <<endl;
   cout << "第二本書作者 : " << Book2.author <<endl;
   cout << "第二本書類目 : " << Book2.subject <<endl;
   cout << "第二本書 ID : " << Book2.book_id <<endl;
 
   return 0;
}

實例中定義了結(jié)構(gòu)體類型 Books 及其兩個變量 Book1 和 Book2。當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果: 

第一本書標(biāo)題:C++教程
第一本書作者:Runoob
第一本書類目:編程語言
第一本書ID:12345
第一本書標(biāo)題:CSS教程
第一本書作者:Runoob
第一本書類目:前端技術(shù)
第一本書ID:123456

結(jié)構(gòu)作為函數(shù)參數(shù)

您可以把結(jié)構(gòu)作為函數(shù)參數(shù),傳參方式與其他類型的變量或指針類似。您可以使用上面實例中的方式來訪問結(jié)構(gòu)變量:

#include <iostream>
#include <cstring>
 
using namespace std;
void printBook( struct Books book );
 
// 聲明一個結(jié)構(gòu)體類型 Books 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
int main( )
{
   Books Book1;        // 定義結(jié)構(gòu)體類型 Books 的變量 Book1
   Books Book2;        // 定義結(jié)構(gòu)體類型 Books 的變量 Book2
 
    // Book1 詳述
   strcpy( Book1.title, "C++ 教程");
   strcpy( Book1.author, "Runoob"); 
   strcpy( Book1.subject, "編程語言");
   Book1.book_id = 12345;
 
   // Book2 詳述
   strcpy( Book2.title, "CSS 教程");
   strcpy( Book2.author, "Runoob");
   strcpy( Book2.subject, "前端技術(shù)");
   Book2.book_id = 1234556;
 
   // 輸出 Book1 信息
   printBook( Book1 );
 
   // 輸出 Book2 信息
   printBook( Book2 );
 
   return 0;
}
void printBook( struct Books book )
{
   cout << "書標(biāo)題 : " << book.title <<endl;
   cout << "書作者 : " << book.author <<endl;
   cout << "書類目 : " << book.subject <<endl;
   cout << "書 ID : " << book.book_id <<endl;
}

當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

書標(biāo)題:C++教程
書作者:Runoob
書類目:編程語言
書ID:12345
書標(biāo)題:CSS教程
書作者:Runoob
書類目:前端技術(shù)
書ID:123456

指向結(jié)構(gòu)的指針

您可以定義指向結(jié)構(gòu)的指針,方式與定義指向其他類型變量的指針相似,如下所示:

struct Books *struct_pointer;

現(xiàn)在,您可以在上述定義的指針變量中存儲結(jié)構(gòu)變量的地址。為了查找結(jié)構(gòu)變量的地址,請把 & 運算符放在結(jié)構(gòu)名稱的前面,如下所示:

struct_pointer = &Book1;

為了使用指向該結(jié)構(gòu)的指針訪問結(jié)構(gòu)的成員,您必須使用 -> 運算符,如下所示:

struct_pointer->title;

讓我們使用結(jié)構(gòu)指針來重寫上面的實例,這將有助于您理解結(jié)構(gòu)指針的概念:

#include <iostream>
#include <cstring>
 
using namespace std;
void printBook( struct Books *book );
 
struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
 
int main( )
{
   Books Book1;        // 定義結(jié)構(gòu)體類型 Books 的變量 Book1
   Books Book2;        // 定義結(jié)構(gòu)體類型 Books 的變量 Book2
 
    // Book1 詳述
   strcpy( Book1.title, "C++ 教程");
   strcpy( Book1.author, "Runoob"); 
   strcpy( Book1.subject, "編程語言");
   Book1.book_id = 12345;
 
   // Book2 詳述
   strcpy( Book2.title, "CSS 教程");
   strcpy( Book2.author, "Runoob");
   strcpy( Book2.subject, "前端技術(shù)");
   Book2.book_id = 1234556;
 
   // 通過傳 Book1 的地址來輸出 Book1 信息
   printBook( &Book1 );
 
   // 通過傳 Book2 的地址來輸出 Book2 信息
   printBook( &Book2 );
 
   return 0;
}
// 該函數(shù)以結(jié)構(gòu)指針作為參數(shù)
void printBook( struct Books *book )
{
   cout << "書標(biāo)題  : " << book->title <<endl;
   cout << "書作者 : " << book->author <<endl;
   cout << "書類目 : " << book->subject <<endl;
   cout << "書 ID : " << book->book_id <<endl;
}

當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

書標(biāo)題:C++教程
書作者:Runoob
書類目:編程語言
書ID:12345
書標(biāo)題:CSS教程
書作者:Runoob
書類目:前端技術(shù)
書ID:123456

typedef 關(guān)鍵字

下面是一種更簡單的定義結(jié)構(gòu)的方式,您可以為創(chuàng)建的類型取一個"別名"。例如:

typedef struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
}Books;

現(xiàn)在,您可以直接使用 Books 來定義 Books 類型的變量,而不需要使用 struct 關(guān)鍵字。下面是實例:

Books Book1, Book2;

您可以使用 typedef 關(guān)鍵字來定義非結(jié)構(gòu)類型,如下所示:

typedef long int *pint32;
 
pint32 x, y, z;

x, y 和 z 都是指向長整型 long int 的指針。

C++ 數(shù)據(jù)封裝

所有的 C++ 程序都有以下兩個基本要素:

  • 程序語句(代碼):這是程序中執(zhí)行動作的部分,它們被稱為函數(shù)。
  • 程序數(shù)據(jù):數(shù)據(jù)是程序的信息,會受到程序函數(shù)的影響。

封裝是面向?qū)ο缶幊讨械陌褦?shù)據(jù)和操作數(shù)據(jù)的函數(shù)綁定在一起的一個概念,這樣能避免受到外界的干擾和誤用,從而確保了安全。數(shù)據(jù)封裝引申出了另一個重要的 OOP 概念,即數(shù)據(jù)隱藏。

數(shù)據(jù)封裝是一種把數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)捆綁在一起的機制,數(shù)據(jù)抽象是一種僅向用戶暴露接口而把具體的實現(xiàn)細(xì)節(jié)隱藏起來的機制。

C++ 通過創(chuàng)建類來支持封裝和數(shù)據(jù)隱藏(public、protected、private)。我們已經(jīng)知道,類包含私有成員(private)、保護(hù)成員(protected)和公有成員(public)成員。默認(rèn)情況下,在類中定義的所有項目都是私有的。例如:

class Box
{
   public:
      double getVolume(void)
      {
         return length * breadth * height;
      }
   private:
      double length;      // 長度
      double breadth;     // 寬度
      double height;      // 高度
};

變量 length、breadth 和 height 都是私有的(private)。這意味著它們只能被 Box 類中的其他成員訪問,而不能被程序中其他部分訪問。這是實現(xiàn)封裝的一種方式。

為了使類中的成員變成公有的(即,程序中的其他部分也能訪問),必須在這些成員前使用 public 關(guān)鍵字進(jìn)行聲明。所有定義在 public 標(biāo)識符后邊的變量或函數(shù)可以被程序中所有其他的函數(shù)訪問。

把一個類定義為另一個類的友元類,會暴露實現(xiàn)細(xì)節(jié),從而降低了封裝性。理想的做法是盡可能地對外隱藏每個類的實現(xiàn)細(xì)節(jié)。

數(shù)據(jù)封裝的實例

C++ 程序中,任何帶有公有和私有成員的類都可以作為數(shù)據(jù)封裝和數(shù)據(jù)抽象的實例。請看下面的實例:

#include <iostream>
using namespace std;
 
class Adder{
   public:
      // 構(gòu)造函數(shù)
      Adder(int i = 0)
      {
        total = i;
      }
      // 對外的接口
      void addNum(int number)
      {
          total += number;
      }
      // 對外的接口
      int getTotal()
      {
          return total;
      };
   private:
      // 對外隱藏的數(shù)據(jù)
      int total;
};
int main( )
{
   Adder a;
   
   a.addNum(10);
   a.addNum(20);
   a.addNum(30);
 
   cout << "Total " << a.getTotal() <<endl;
   return 0;
}

當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

Total 60

上面的類把數(shù)字相加,并返回總和。公有成員 addNum 和 getTotal 是對外的接口,用戶需要知道它們以便使用類。私有成員 total 是對外隱藏的,用戶不需要了解它,但它又是類能正常工作所必需的。

設(shè)計策略

通常情況下,我們都會設(shè)置類成員狀態(tài)為私有(private),除非我們真的需要將其暴露,這樣才能保證良好的封裝性。

這通常應(yīng)用于數(shù)據(jù)成員,但它同樣適用于所有成員,包括虛函數(shù)。

C++ 類 & 對象

C++ 在 C 語言的基礎(chǔ)上增加了面向?qū)ο缶幊蹋珻++ 支持面向?qū)ο蟪绦蛟O(shè)計。類是 C++ 的核心特性,通常被稱為用戶定義的類型。

類用于指定對象的形式,是一種用戶自定義的數(shù)據(jù)類型,它是一種封裝了數(shù)據(jù)和函數(shù)的組合。類中的數(shù)據(jù)稱為成員變量,函數(shù)稱為成員函數(shù)。類可以被看作是一種模板,可以用來創(chuàng)建具有相同屬性和行為的多個對象。

C++ 類定義

定義一個類需要使用關(guān)鍵字 class,然后指定類的名稱,并類的主體是包含在一對花括號中,主體包含類的成員變量和成員函數(shù)。

定義一個類,本質(zhì)上是定義一個數(shù)據(jù)類型的藍(lán)圖,它定義了類的對象包括了什么,以及可以在這個對象上執(zhí)行哪些操作。

以下實例我們使用關(guān)鍵字 class 定義 Box 數(shù)據(jù)類型,包含了三個成員變量 length、breadth 和 height:

class Box
{
   public:
      double length;   // 盒子的長度
      double breadth;  // 盒子的寬度
      double height;   // 盒子的高度
};

關(guān)鍵字 public 確定了類成員的訪問屬性。在類對象作用域內(nèi),公共成員在類的外部是可訪問的。您也可以指定類的成員為 private 或 protected,這個我們稍后會進(jìn)行講解。

定義 C++ 對象

類提供了對象的藍(lán)圖,所以基本上,對象是根據(jù)類來創(chuàng)建的。聲明類的對象,就像聲明基本類型的變量一樣。下面的語句聲明了類 Box 的兩個對象:

Box Box1; // 聲明 Box1,類型為 Box Box Box2; // 聲明 Box2,類型為 Box

對象 Box1 和 Box2 都有它們各自的數(shù)據(jù)成員。

訪問數(shù)據(jù)成員

類的對象的公共數(shù)據(jù)成員可以使用直接成員訪問運算符 . 來訪問。

為了更好地理解這些概念,讓我們嘗試一下下面的實例:

#include <iostream>
 
using namespace std;
 
class Box
{
   public:
      double length;   // 長度
      double breadth;  // 寬度
      double height;   // 高度
      // 成員函數(shù)聲明
      double get(void);
      void set( double len, double bre, double hei );
};
// 成員函數(shù)定義
double Box::get(void)
{
    return length * breadth * height;
}
 
void Box::set( double len, double bre, double hei)
{
    length = len;
    breadth = bre;
    height = hei;
}
int main( )
{
   Box Box1;        // 聲明 Box1,類型為 Box
   Box Box2;        // 聲明 Box2,類型為 Box
   Box Box3;        // 聲明 Box3,類型為 Box
   double volume = 0.0;     // 用于存儲體積
 
   // box 1 詳述
   Box1.height = 5.0; 
   Box1.length = 6.0; 
   Box1.breadth = 7.0;
 
   // box 2 詳述
   Box2.height = 10.0;
   Box2.length = 12.0;
   Box2.breadth = 13.0;
 
   // box 1 的體積
   volume = Box1.height * Box1.length * Box1.breadth;
   cout << "Box1 的體積:" << volume <<endl;
 
   // box 2 的體積
   volume = Box2.height * Box2.length * Box2.breadth;
   cout << "Box2 的體積:" << volume <<endl;
 
 
   // box 3 詳述
   Box3.set(16.0, 8.0, 12.0); 
   volume = Box3.get(); 
   cout << "Box3 的體積:" << volume <<endl;
   return 0;
}

當(dāng)上面的代碼被編譯和執(zhí)行時,它會產(chǎn)生下列結(jié)果:

Box1的體積:210
Box2的體積:1560
Box3的體積:1536

需要注意的是,私有的成員和受保護(hù)的成員不能使用直接成員訪問運算符 (.) 來直接訪問。我們將在后續(xù)的教程中學(xué)習(xí)如何訪問私有成員和受保護(hù)的成員。

以上就是C++數(shù)據(jù)封裝以及定義結(jié)構(gòu)的詳細(xì)講解的詳細(xì)內(nèi)容,更多關(guān)于C++數(shù)據(jù)封裝以及定義結(jié)構(gòu)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Cocos2d-x中使用CCScrollView來實現(xiàn)關(guān)卡選擇實例

    Cocos2d-x中使用CCScrollView來實現(xiàn)關(guān)卡選擇實例

    這篇文章主要介紹了Cocos2d-x中使用CCScrollView來實現(xiàn)關(guān)卡的選擇實例,本文在代碼中用大量注釋講解了CCScrollView的使用,需要的朋友可以參考下
    2014-09-09
  • C語言中枚舉與聯(lián)合體的使用方法(enum union)

    C語言中枚舉與聯(lián)合體的使用方法(enum union)

    枚舉的意思就是列舉,將每一個可能的取值都進(jìn)行一一列舉,下面這篇文章主要給大家介紹了關(guān)于C語言中枚舉與聯(lián)合體的使用方法,需要的朋友可以參考下
    2021-09-09
  • 簡單舉例說明C++中break和continue語句的用法

    簡單舉例說明C++中break和continue語句的用法

    這篇文章主要介紹了簡單舉例說明C++中break和continue語句的用法,是C++入門學(xué)習(xí)中的基礎(chǔ)只是,需要的朋友可以參考下
    2015-09-09
  • C++淺析STL?迭代器?容器的使用

    C++淺析STL?迭代器?容器的使用

    這篇文章主要介紹了C++?STL、迭代器、容器,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • 簡述C++的復(fù)雜性

    簡述C++的復(fù)雜性

    這篇文章主要介紹了簡述C++的復(fù)雜性,幫助大家更好的理解和認(rèn)識c++編程語言,感興趣的朋友可以了解下
    2020-08-08
  • C語言示例講解if else語句的用法

    C語言示例講解if else語句的用法

    這篇文章主要介紹C語言中的If Else語句怎么使用,在日常操作中,相信很多人在If Else語句怎么使用問題上存在疑惑,小編查閱了各式資料,整理出使用方法,接下來,請跟著小編一起來學(xué)習(xí)吧
    2022-06-06
  • C++使用easyX庫實現(xiàn)三星環(huán)繞效果流程詳解

    C++使用easyX庫實現(xiàn)三星環(huán)繞效果流程詳解

    EasyX是針對C/C++的圖形庫,可以幫助使用C/C++語言的程序員快速上手圖形和游戲編程。這篇文章主要介紹了C++使用easyX庫實現(xiàn)三星環(huán)繞效果,需要的可以參考一下
    2022-10-10
  • C++11的for循環(huán),以及范圍Range類的簡單實現(xiàn)

    C++11的for循環(huán),以及范圍Range類的簡單實現(xiàn)

    下面小編就為大家?guī)硪黄狢++11的for循環(huán),以及范圍Range類的簡單實現(xiàn)。小編覺得挺不錯的, 現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • C++類靜態(tài)成員與類靜態(tài)成員函數(shù)詳解

    C++類靜態(tài)成員與類靜態(tài)成員函數(shù)詳解

    靜態(tài)成員不可在類體內(nèi)進(jìn)行賦值,因為它是被所有該類的對象所共享的。你在一個對象里給它賦值,其他對象里的該成員也會發(fā)生變化。為了避免混亂,所以不可在類體內(nèi)進(jìn)行賦值
    2013-09-09
  • C語言多文件編寫詳解

    C語言多文件編寫詳解

    這篇文章主要介紹了C語言多文件編寫,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-09-09

最新評論