C++01.類的引入

来源:http://www.cnblogs.com/LinSL/archive/2016/12/18/6194563.html
-Advertisement-
Play Games

1.假設我們要輸出張三,李四兩個人的基本信息,包括姓名,年齡,可以用以下的C程式實現: eg: 2.假設要輸出很多人的信息,那麼用上面這樣的程式思路實現起來很不方便,可以用數組來實現: eg: 3.假設基本信息的屬性有很多個,還有工作,婚姻狀況等等的屬性,按上面的程式思想,我們就得增加很多用於保存屬 ...


1.假設我們要輸出張三,李四兩個人的基本信息,包括姓名,年齡,可以用以下的C程式實現:

eg:

 1 #include <stdio.h>
 2 
 3 int main(int argc,char **argv)
 4 {
 5     char *zs_name="zhansan";
 6     int zs_age=10;
 7 
 8     char *ls_name="lisi";
 9     int ls_age=19;
10 
11     printf("name=%s,age=%d\n",zs_name,zs_age);
12     printf("name=%s,age=%d\n",ls_name,ls_age);
13     
14     return 0;
15 }

2.假設要輸出很多人的信息,那麼用上面這樣的程式思路實現起來很不方便,可以用數組來實現:

eg:

 1 #include <stdio.h>
 2 
 3 int main(int argc,char **argv)
 4 {
 5     char *names[]={"zhangsan","lisi"};
 6     char ages[]={10,19};
 7 
 8     int i;
 9 
10     //用for來迴圈輸出
11     for(i=0;i<2;i++){
12         printf("name=%s,age=%d\n",names[i],ages[i]);
13     }
14 
15     
16     return 0;
17 }

3.假設基本信息的屬性有很多個,還有工作,婚姻狀況等等的屬性,按上面的程式思想,我們就得增加很多用於保存屬性的數組,這顯然也不是很方便,可以繼續改進程式,引入結構體:

eg:

 1 #include <stdio.h>
 2 
 3 struct person{
 4         char *name;
 5         int age;
 6         char *work;
 7     };
 8 
 9 int main(int argc,char **argv)
10 {
11     struct person persons[]={
12         {"zhangsan",10,"teacher"},
13         {"lisi",19,"doctor"},
14     };
15 
16     int i;
17 
18     //用for來迴圈輸出
19     for(i=0;i<2;i++){
20         printf("name=%s,age=%d,work=%s\n",persons[i].name,persons[i].age,persons[i].work);
21     };
22 
23     
24     return 0;
25 }

4.上面的函數只是在結構體內定義了屬性,我們可以繼續改進,定義一些相關的函數:

eg:註意在C語言裡面,只能寫函數指針。

 1 #include <stdio.h>
 2 
 3 struct person{
 4         char *name;
 5         int age;
 6         char *work;
 7 
 8         void (*printfInfo)(struct person *per);
 9     };
10 
11 void printfInfo(struct person *per)
12 {
13         printf("name=%s,age=%d,work=%s\n",per->name,per->age,per->work);
14 }
15 
16 int main(int argc,char **argv)
17 {
18     struct person persons[]={
19         {"zhangsan",10,"teacher",printfInfo},
20         {"lisi",19,"doctor",printfInfo},
21     };
22 
23     persons[0].printfInfo(&persons[0]);
24     persons[1].printfInfo(&persons[1]);
25     
26     return 0;
27 }

 

5.用更簡潔的方式寫上面的程式,直接在結構體內寫函數,註意以下程式文件的尾碼是“.cpp”而不是“.c”不然會出現錯誤。

eg:

#include <stdio.h>

struct person{
        char *name;
        int age;
        char *work;

        void printfInfo(void)
        {
            printf("name=%s,age=%d,work=%s\n",name,age,work);
        }
    };
int main(int argc,char **argv)
{
    struct person persons[]={
        {"zhangsan",10,"teacher"},
        {"lisi",19,"doctor"},
    };

    persons[0].printfInfo();
    persons[1].printfInfo();
    
    return 0;
}

6.C++對struct做了擴展,可以直接在strucr內直接定義函數,函數可以直接訪問struct裡面的屬性。可以把這個結構體重新定義為一個新的類別:

eg:

 1 #include <stdio.h>
 2 
 3 class person{
 4 public:            //必須定義許可權為public,不然編譯會出錯。
 5         char *name;
 6         int age;
 7         char *work;
 8 
 9         void printfInfo(void)
10         {
11             printf("name=%s,age=%d,work=%s\n",name,age,work);
12         }
13     };
14 int main(int argc,char **argv)
15 {
16     struct person persons[]={
17         {"zhangsan",10,"teacher"},
18         {"lisi",19,"doctor"},
19     };
20 
21     persons[0].printfInfo();
22     persons[1].printfInfo();
23     
24     return 0;
25 }

  

 

面向對象程式編程的特點:

(1)封裝

(2)繼承

(3)多態


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 實現客戶端與服務端的連接: 使用ServerSocket創建TCP服務端 ServerSocket :此類實現伺服器套接字。伺服器套接字請求通過網路傳入,基於該請求執行某些操作,然後可能向請求者返回結果。 詳細描述見:http://download.java.net/jdk/jdk-api-loca ...
  • 1.什麼是模塊? 為了讓Node.js的文件可以相互調用,Node.js提供了一個簡單的模塊系統。 模塊是Node.js 應用程式的基本組成部分,文件和模塊是一一對應的。換言之,一個 Node.js 文件就是一個模塊,這個文件可能是JavaScript 代碼、JSON 或者編譯過的C/C++ 擴展。 ...
  • # -*- coding:utf-8 -*- import os def systemInfo(): #os.name 獲取系統的平臺 Windows 返回 ‘nt'; Linux 返回’posix' if os.name=='nt': print "你的系統是Windows系統" else: pr ...
  • 簡介:學習完了php和jQuery之後,對函數的記憶不到位,導致很多函數沒記住,所以為了促進自己的記憶,每天花一點時間來寫這個博客。 時間:2016-12-18 地點:太原 天氣:晴 一.php函數(數組相關的函數) 1.array_change_key_case 作用:返回字元串鍵名為全大寫或者全 ...
  • 1.class是struct的擴展,它包括數據成員和成員函數。 2.在C++中,有三種訪問許可權: (1)private:預設,只供類內部的函數使用。 (2)public:類外的程式可以使用。 (3)proteted 註意: C++的規範,類名稱的首字母應該大寫。 eg: 出現錯誤: 3.通過函數來訪 ...
  • 上一篇文章網站實現微信登錄之嵌入二維碼中描述瞭如何在自己的登錄頁面內嵌入登錄二維碼,今天的這篇文章主要是描述下在掃碼成功之後微信重定向回網站後登錄邏輯的處理,其實也就是驗證身份信息,授權用戶登錄的邏輯。這裡說句題外話,寫博客複習已經做過的項目真的有助於自己對已經寫過代碼和業務邏輯的理解,說不定還有意 ...
  • 1.node-formidable 對文件上傳提供幫助的組件 2.app.js ...
  • <filter>: 過濾器,執行一個過濾器會有返回個枚舉值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日誌將立即被拋棄不再經過其他過濾器;返回NEUTRAL,有序列表裡的下個過濾器過接著處理日誌;返回ACCEPT,日誌會被立即處理,不再經過剩餘過濾器。 過濾器被添加到<Appe ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...