1. 程式人生 > >C/C++(C++類型增強)

C/C++(C++類型增強)

urn class 不可 void alloc false int %d 個數

C++類型增強

類型檢查更嚴格

把一個const類型的指針賦給非const類型的指針。c語言中可以通的過,但是在c++中則編不過去

const int a = 10;
a = 100;//const修飾的不能修改
int *p = &a;
*p = 100;
printf("a = %d\n",a);//a = 100,c裏面類型不嚴密,指針能修改const修飾的變量,實際是a是const int *類型,也就是說強行的賦給int *,把const漏掉了。
const int a與int const a一樣,看const修飾誰把類型去掉。
int *const p;把int去掉,p不能改變,p指向的內容可以改變。
const
int *const p;它指向的本身和內容都不能改變。
#include<iostream>
using namespace std;
int main() {
    const int a = 100;//const修飾的必須要初始化
    int *p = &a;//不可以報錯 const int *無法轉化成int *;
    const int *p = &a;//才是正確的
    //C++不需要強轉
    char *p = malloc(100);//C++會報錯
    char *q = (char*)malloc(100);//void *

    return 0;
}

布爾類型(bool)

c 語言的邏輯真假用 0 和非 0 來表示。而 c++中有了具體的類型。

int main()
{
    bool flag = true;
    if(flag)
        printf("hello world!\n");
    else
        printf("hello C++!\n");

    return 0;
}

真正的枚舉(enum)

c 語言中枚舉本質就是整型,枚舉變量可以用任意整型賦值。而 c++中枚舉變量,只能用被枚舉出來的元素初始化。

bool用枚舉實現過程:

#include<iostream>
enum BOOL
{
    FALSE,TURE
};
int
main() { const int a = 100; BOOL flag = TRUE; bool aa = true; if(flag) cout<<a; printf("sizeof(flag) = %d sizeof(BOOL) = %d sizeof(bool) = %d\n",sizeof(flag),sizeof(BOOL),sizeof(bool)); } //sizeof(flag) = 4 sizeof(BOOL) = 4 sizeof(bool) = 1 //enum枚舉本質是整型

它和即將所學的string類型並不是實際意義上的數據類型而是一個對象。

enum SEASOM
{
    Spr,Sum,Autu,Win
};
int main()
{
    SEASON s;
    s = Win;//在C++中比較嚴格,除了枚舉外的無法賦值。c裏面就可以賦其他值。
    return 0;
}

其實枚舉可以和宏來等價

#define Spr 0
#define Sun 1
....


enum
{
    Spr = 1,Sum,Autu,Win
};

在C++中經可能的使用枚舉,const代替使用宏。

表達式的值可被賦值

c:

int main()
{
    int a,b=10;
    a = b = 100;//100賦值給b,b = 100這個表達式賦值給a。
    (a = b) = 100;//錯誤,表達式是不可被賦值的
    (a != b?a:b) = 1000;//錯誤
    return 0;
}

c++

int main()
{
    int a,b = 5;
    (a = b) = 100;
    printf("a = %d b = %d\n",a,b);
    (a != b?a:b) = 1000;
    printf("a = %d b = %d\n",a,b);
    return 0;
}
//a = 100,b = 5;
//a = 1000,b = 5
//a = b是一個表達式,b的值賦值給a,最後把100的值賦值給a,b的值沒發生變化。

體現C++對C語言的限制與提升

cin cout類對象

scanf printf函數的功能相同

int main()
{
    char name[30];
    scanf("%s",name);//不安全的輸入,輸入很多會掛機
    fgets(name,30,stdin);//最多只能輸入29個字符,比較安全。

    cin>>name;//>>流輸入運算符
    cout<<"name = "<<name<<endl;
//"name = "字符串流入cout對象,name流入cout對象,endl(換行)流入cout對象中,從左至右的順序。

    string name1;
    cin>>name1;
    cout<<name1;
    //很安全,輸多少都不會掛機
    cin>>a>>b;//有順序,從鍵盤輸入的第一個數流入a,第二個數流入b
    //<=>
    cin>>a;
    cin>>b;

    return 0;
}

C/C++(C++類型增強)