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

C++內置類型與自定義類型的對比分析

 更新時間:2025年08月27日 08:55:06   作者:草莓熊Lotso  
本文對比了C與C++的類型系統(tǒng),C內置類型簡潔貼近硬件,C++擴展了布爾、寬字符及固定大小類型,并增強自定義類型功能,支持封裝、繼承、多態(tài),提升代碼安全性與模塊化

前言:類型系統(tǒng)是編程語言的基礎,它定義了數(shù)據(jù)的表示方式、取值范圍和可執(zhí)行的操作。C 語言和 C++ 作為一脈相承又各有特色的語言,在類型系統(tǒng)設計上既有延續(xù)性,又存在顯著差異。

本篇文章將深入探討兩種語言的內置類型和自定義類型,分析它們的特點與應用場景。

一.內置類型

內置類型(Primitive Types)是編程語言本身提供的基本數(shù)據(jù)類型,它們直接映射到計算機硬件能夠高效處理的數(shù)據(jù)形式。

C 語言的內置類型

C 語言的內置類型簡潔而貼近硬件,主要包括:

整數(shù)類型

  • char:字符類型,通常 1 字節(jié),可表示 ASCII 字符或小整數(shù)
  • short/short int:短整數(shù),通常 2 字節(jié)
  • int:整數(shù),通常 4 字節(jié),為系統(tǒng)最高效處理的整數(shù)類型
  • long/long int:長整數(shù),通常 4 或 8 字節(jié)
  • long long:雙長整數(shù),通常 8 字節(jié)
  • 以上類型均可加signed(有符號)或unsigned(無符號)修飾

浮點類型

  • float:單精度浮點數(shù),通常 4 字節(jié)
  • double:雙精度浮點數(shù),通常 8 字節(jié)
  • long double:擴展精度浮點數(shù),長度因平臺而異

特殊類型

  • void:表示 "無類型",用于函數(shù)返回值或通用指針

示例:

#include <stdio.h>

int main() {
    char c = 'A';           // 字符類型
    unsigned int age = 30;  // 無符號整數(shù)
    float pi = 3.14f;       // 單精度浮點數(shù)
    double e = 2.71828;     // 雙精度浮點數(shù)
    void* ptr = NULL;       // 通用指針
    
    printf("char大小: %zu字節(jié)\n", sizeof(c));
    printf("int大小: %zu字節(jié)\n", sizeof(age));
    return 0;
}

C++ 的內置類型

C++ 完全繼承了 C 的內置類型,并在此基礎上增加了一些擴展:

  1. 布爾類型bool,取值為truefalse,這是 C 語言沒有的原生類型
  2. 寬字符類型wchar_t(寬字符)、char16_t(UTF-16 字符)、char32_t(UTF-32 字符)
  3. C++11 后的固定大小整數(shù)類型:如int32_tuint64_t等(需包含<cstdint>

示例:

#include <iostream>
#include <cstdint>

int main() {
    bool flag = true;               // 布爾類型
    int32_t exact_int = 123456;     // 固定32位有符號整數(shù)
    uint64_t big_uint = 1234567890ULL; // 固定64位無符號整數(shù)
    
    std::cout << "bool大小: " << sizeof(flag) << "字節(jié)\n";
    std::cout << "int32_t大小: " << sizeof(exact_int) << "字節(jié)\n";
    return 0;
}

C++ 的內置類型在 C 的基礎上增強了類型安全性和對現(xiàn)代字符編碼的支持,bool類型的引入使邏輯判斷更加清晰。

二.自定義類型:開發(fā)者構建的數(shù)據(jù)結構

自定義類型(User-Defined Types)允許開發(fā)者根據(jù)需求創(chuàng)建新的數(shù)據(jù)類型,是構建復雜程序的基礎。

C 語言的自定義類型

C 語言提供了有限但實用的自定義類型機制:

  • 結構體(struct):將不同類型的變量組合在一起
// 定義點結構體
struct Point {
    int x;
    int y;
};

// 定義學生結構體
struct Student {
    char name[20];
    int age;
    float score;
    struct Point location; // 結構體嵌套
};
  • 聯(lián)合體(union):所有成員共享同一塊內存空間
// 可存儲不同類型數(shù)據(jù)的聯(lián)合體
union Data {
    int i;
    float f;
    char str[20];
}; // 大小為20字節(jié)(最大成員的大?。?/pre>
  • 枚舉(enum):為整數(shù)常量定義有意義的名稱
// 定義顏色枚舉
enum Color {
    RED,    // 0
    GREEN,  // 1
    BLUE    // 2
};

// 定義帶初始值的枚舉
enum Month {
    JAN = 1,
    FEB,
    MAR,
    // ... 其余月份
    DEC
};
  •  typedef :為現(xiàn)有類型創(chuàng)建別名
typedef struct {
    int hours;
    int minutes;
    int seconds;
} Time; // 現(xiàn)在可以用Time代替struct定義

typedef unsigned long long ULL; // 為無符號長long創(chuàng)建短別名

C 語言的自定義類型本質上是數(shù)據(jù)的聚合,缺乏對數(shù)據(jù)操作的封裝。

C++ 的自定義類型

C++ 在 C 的基礎上極大地擴展了自定義類型的能力,引入了面向對象的特性:

  • 類(class):C++ 的核心,將數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)封裝在一起
class Circle {
private:
    // 私有成員(數(shù)據(jù)隱藏)
    double radius;
    const double PI = 3.14159;
    
public:
    // 構造函數(shù)(初始化對象)
    Circle(double r) : radius(r) {}
    
    // 成員函數(shù)(操作數(shù)據(jù))
    double getArea() const {
        return PI * radius * radius;
    }
    
    void setRadius(double r) {
        if (r > 0) radius = r; // 可以加入數(shù)據(jù)驗證
    }
};
  • 結構體(struct):在 C++ 中與 class 類似,區(qū)別在于默認訪問權限為 public
struct Rectangle {
    double width;
    double height;
    
    // C++結構體可以有成員函數(shù)
    double area() const {
        return width * height;
    }
};
  •  聯(lián)合體(union):C++11 后支持包含非 POD 類型和成員函數(shù)
union Variant {
private:
    int i;
    float f;
    
public:
    Variant(int val) : i(val) {}
    Variant(float val) : f(val) {}
    
    int getInt() const { return i; }
    float getFloat() const { return f; }
};
  •  枚舉類(enum class):類型安全的枚舉,避免命名沖突
enum class Color {
    RED,
    GREEN,
    BLUE
};

enum class TrafficLight {
    RED,    // 與Color::RED不沖突
    YELLOW,
    GREEN
};
  • 其他自定義類型 

- 模板類型 :如std::vectorstd::string等標準容器

- 類型別名 **:using關鍵字(比 typedef 更靈活)

using IntPair = std::pair<int, int>;
using StringList = std::vector<std::string>;

C++ 的自定義類型實現(xiàn)了數(shù)據(jù)與操作的封裝,支持訪問控制、繼承、多態(tài)等面向對象特性,極大地增強了代碼的模塊化和可維護性。

三.類型系統(tǒng)的核心差異對比

特性C 語言C++
內置類型基礎整數(shù)、浮點、字符類型,無布爾類型繼承 C 的所有類型,增加 bool、寬字符類型和固定大小整數(shù)類型
自定義類型基礎struct、union、enum、typedef繼承 C 的所有形式并增強
面向對象支持有(class 為核心)
封裝性僅數(shù)據(jù)聚合,無訪問控制支持數(shù)據(jù)和函數(shù)封裝,有 public/private/protected 控制
類型安全較弱,隱式轉換較多較強,引入 enum class 等安全類型
擴展性有限強大,支持模板、繼承、多態(tài)等

實踐建議

1. C 語言 :

  • 利用 struct 組織相關數(shù)據(jù)
  • 使用 enum 使代碼更具可讀性
  • 合理使用 typedef 簡化復雜類型聲明
  • 注意 union 的內存共享特性,避免數(shù)據(jù)訪問沖突

2.C++ 語言 :

  • 優(yōu)先使用 class 封裝數(shù)據(jù)和操作
  • 用 enum class 替代傳統(tǒng) enum,提高類型安全性
  • 利用 using 創(chuàng)建清晰的類型別名
  • 充分利用標準庫提供的豐富自定義類型(如std::string、std::vector
  • 對于簡單數(shù)據(jù)聚合可使用 struct,需要封裝和行為時使用 class

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 一文詳解C語言操作符

    一文詳解C語言操作符

    這篇文章主要詳細介紹了C語言的操作符,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • C++ 中CListCtrl的每個項都顯示不同的提示信息

    C++ 中CListCtrl的每個項都顯示不同的提示信息

    這篇文章主要介紹了C++ 中CListCtrl的每個項都顯示不同的提示信息的相關資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • C++遞歸線性陣列搜索數(shù)字的方法

    C++遞歸線性陣列搜索數(shù)字的方法

    這篇文章主要介紹了C++遞歸線性陣列搜索數(shù)字的方法,涉及C++遞歸及數(shù)組操作的相關技巧,需要的朋友可以參考下
    2015-06-06
  • 深入C++中struct與class的區(qū)別分析

    深入C++中struct與class的區(qū)別分析

    本篇文章是對C++中struct與class的區(qū)別進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C++ STL中容器string超詳細講解

    C++ STL中容器string超詳細講解

    STL是C++標準庫的重要組成部分,不僅是一個可復用的 組件庫,而且是一個包羅數(shù)據(jù)結構與算法的軟件框架,本文給大家介紹C++ STL中容器string超詳細講解,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • C語言實現(xiàn)掃雷代碼

    C語言實現(xiàn)掃雷代碼

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)掃雷代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • VScode編譯C++ 頭文件顯示not found的問題

    VScode編譯C++ 頭文件顯示not found的問題

    這篇文章主要介紹了VScode編譯C++ 頭文件顯示not found的問題,本文給大家分享問題解決方法,通過截圖的形式給大家介紹的非常詳細,需要的朋友可以參考下
    2020-03-03
  • C++數(shù)組指針和二維數(shù)組詳情

    C++數(shù)組指針和二維數(shù)組詳情

    這篇文章主要介紹了C++數(shù)組指針和二維數(shù)組,指針數(shù)組和二維數(shù)組在應用中常用于函數(shù)傳參,下面我們就來看看指針數(shù)組和二維數(shù)組在應用中的具體使用吧,需要的朋友可以參考一下
    2021-10-10
  • C語言 函數(shù)指針(指向函數(shù)的指針)詳解

    C語言 函數(shù)指針(指向函數(shù)的指針)詳解

    本文主要介紹 C語言函數(shù)指針的知識,這里整理了詳細的資料及示例代碼以便大家學習參考,有需要學習此部分知識的朋友可以參考下
    2016-08-08
  • C++ 二維數(shù)組參數(shù)傳遞的實現(xiàn)方法

    C++ 二維數(shù)組參數(shù)傳遞的實現(xiàn)方法

    這篇文章主要介紹了C++ 二維數(shù)組參數(shù)傳遞的實現(xiàn)方法的相關資料,這里提供三種方法幫助大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08

最新評論

英山县| 什邡市| 若尔盖县| 万州区| 淮北市| 县级市| 碌曲县| 东兰县| 杂多县| 白河县| 林周县| 平昌县| 翁源县| 东乡| 江津市| 武陟县| 永和县| 日喀则市| 陇南市| 通化市| 盐源县| 利津县| 治多县| 莲花县| 聊城市| 靖安县| 龙胜| 康马县| 潼南县| 卓资县| 防城港市| 沁源县| 龙井市| 隆回县| 黄大仙区| 油尖旺区| 肃宁县| 海伦市| 连山| 拜泉县| 新宾|