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

C++類型加強

類型檢查更嚴格

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

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++中有了具體的類型。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類型並非實際意義上的數據類型而是一個對象。spa

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代替使用宏。code

表達式的值可被賦值

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++ci

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;
}
相關文章
相關標籤/搜索