C++ベース(一)C++によるC言語の強化

31511 ワード

文書ディレクトリ
  • 変数定義の位置は、定義
  • に従うことができる.
  • 2グローバル変数の検出能力強化
  • 3 structを使用する場合structキーワード
  • を使用する必要はありません.
  • 4 boolタイプ
  • を追加
  • 5 constの強化
  • 5.1ポインタにより定数値
  • を間接的に変更することはできない.
  • 5.2さらにconstのいくつかの基礎知識
  • を引用する
  • 5.3 c言語のconstは偽物
  • です.
  • 6列挙補強
  • 7ネーミングスペース
  • 7.1ネーミングスペースの使用
  • (1)直接std::cout方式
  • (2)using namesapce std方式
  • を用いる
  • (3)std::cout
  • を使用
  • 7.2カスタムネーミングスペース
  • (1)ネーミングスペース
  • を定義する
  • (2)ネーミングスペースネスト
  • 8 C++のすべての変数と関数には、タイプ
  • が必要です.
  • (1)c++中型検出補強
  • (2)c言語におけるint f()は、任意のパラメータを受信する関数
  • を表す.
  • (3)c言語ではint f(void)は無パラメトリック関数
  • を表す.
  • 9三目演算子機能強化
  • 1変数で定義された位置は、定義に従って使用できます.
    変数定義の場所は、定義に従って使用できます.
    #include 
    using namespace std;
    
    int main(void){
        
        int i = 10;
        for(int i = 0; i < 10; i++){
            cout << "i = " << i << endl;
        }
        return 0;
    }
    

    c言語の初期バージョンでは、ランダム定義はサポートされていません
    2グローバル変数の検出能力強化
    int g_val;
    // int g_val = 10; error: Redefinition of 'g_val'
    int main(void){
        return 0;
    }
    

    1つの変数は、宣言または定義にかかわらず、1回のみ表示されます.
    3 structを使用する場合structキーを使用する必要はありません
    struct teacher{
        int age;
        char name[64];
    };
    
    int main(void){
        teacher t1;
        //c        struct teacher t1;     :Must use 'struct' tag to refer to type 'teacher'
        return 0;
    }
    

    4 boolタイプを追加
    #include 
    
    using namespace std;
    int main(void){
        //1 bool     0 1
        bool flag = true;
        cout << " flag = " << flag << endl;
        
        //2 bool       
        cout << "sizeof(flag) = " << sizeof(flag) << endl;
        
        //3  bool     0  ,     1
        flag = 10;
        cout << "flag = " << flag << endl;
    }
    

    印刷結果
    flag = 1
    sizeof(flag) = 1
    flag = 1
    

    5 constの強化
    5.1ポインタで定数値を間接的に変更できない
    #include 
    int main(void){
        //1 c++  const,   a      ,           a  
        const int a = 10;
        
        int *p = (int*)&a;
        // c                const  
        *p = 20; //  *p          ,   a  
        
        printf("a = %d
    "
    , a); return 0; }

    出力結果
    a = 10
    

    5.2さらにconstの基礎知識を引用する
    //1      
    const int a;
    
    //2      
    int const b;
    
    //3 c           (             ,        )
    int const * c;
    
    //4 d   (         ,               )
    int * const d;
    
    //5          (           ,      )
    const int * const e;
    

    例:
    #include 
    int main(void){
        //1     
        const int a = 10;
        //a = 5;//error:Cannot assign to variable 'a' with const-qualified type 'const int'
        
        //2     
        int const b = 20;
        //b = 20;//error:Cannot assign to variable 'b' with const-qualified type 'const int'
        
        //3 c           
        int c_value = 30;
        const int *c = &c_value;
        printf("*c = %d
    "
    ,*c); // c = &b; printf("*c = %d
    "
    ,*c); // //*c = 40; error:Read-only variable is not assignable //4 d int d_value = 50; int * const d = &d_value; *d = 60; // printf("d_value = %d
    "
    , d_value); // //d = &c_value; //error:Cannot assign to variable 'd' with const-qualified type 'int *const' return 0; }

    出力結果
    *c = 30
    *c = 20
    d_value = 60
    

    5.3 c言語のconstは偽物です
    C言語のconstは偽物であることを記録したいのですが、実際にはC言語でもconst修飾の変数の値を修正することはできません.理論的にC言語ではconst修飾の変数の値をポインタで間接的に修正できるが、実際にはテストできない.
    int main(void){
        const int a = 10;
        printf("a = %d
    "
    , a); int *p = &a; *p = 20; int array[a] ={10,20}; printf("a = %d
    "
    , a); printf("*p = %d
    "
    , *p); printf("array[1] = %d
    "
    , array[1]); return 0; }

    印刷結果
    a = 10
    a = 10
    *p = 20
    array = 20
    

    6列挙強化
    c言語における列挙の本質は整型であり,列挙変数は任意の整形賦値c++でint値をenumタイプに直接付与することはできず,列挙要素で初期化するしかない.
    #include 
    using namespace std;
    enum season{
        SPR,
        SUM,
        AUT,
        WIN
    };
    
    int main(void){
        enum season s = SPR;
        cout << "s = " << s << endl;
        // s = 0; error:Assigning to 'enum season' from incompatible type 'int'
        s = SUM;
        cout << "s = " << s << endl;
        return 0;
    }
    

    印刷結果
    s = 0
    s = 1
    

    7ネーミングスペース
    7.1ネーミングスペースの使用
    (1)直接std::cout方式
    #include 
    #include 
    
    
    int main(void){
        std::cout << "hello world" << std::endl;
        return 0;
    }
    

    出力結果
    Hello world
    

    (2)using namesapce std方式の使用
    using namespace std;
    int main(void){
        cout << "Hello world" << endl;
        return 0;
    }
    

    出力結果
    Hello world
    

    (3)std::coutの使用
    using std::cout;
    int main(void){
        cout << "Hello world" << std::endl;
        return 0;
    }
    

    出力結果
    Hello world
    

    7.2カスタムネーミングスペース
    (1)ネーミングスペースの定義
    namespace China {
        int peopleSize = 14;
    }
    
    using namespace std;
    int main(void){
        using namespace China;
        std::cout << " China::peopleSize = " << China::peopleSize<< std::endl;
        return 0;
    }
    

    出力結果
     China::peopleSize = 14
    

    (2)ネーミングスペースネスト
    namespace China {
        int peopleSize = 14;
        
        namespace HeiBei{
            int peopleSize = 5;
        }
    }
    
    using namespace std;
    int main(void){
        using namespace China;
        std::cout << " China::HeiBei::peopleSize = " << China::HeiBei::peopleSize<< std::endl;
        return 0;
    }
    

    出力結果
     China::HeiBei::peopleSize = 5
    

    8 C++のすべての変数と関数にタイプが必要です.
    (1)c++中型検出補強
    #include 
    
    // c++             error:Unknown type name 'f'
    // c++            error:Unknown type name 'i'
    f(i){
        printf("i = d% 
    "
    ,i); };

    (2)c言語におけるint f()は任意のパラメータを受信する関数を表す.
    void f_2(){
        printf("method f_2()
    "
    ); }; int main(void){ f_2(10); return 0; }

    出力結果
    method f_2()
    

    (3)c言語ではint f(void)は無パラメトリック関数を表す
    void f_3(void){
        printf("method f_3(void)
    "
    ); } int main(void){ // f_3(10); error: Too many arguments to function call, expected 0, have 1 return 0; }

    c++では,int f()とint f(void)は同じ意味を持ち,いずれもintの戻り値を表す無パラメータ関数である.
    9三項演算子の機能強化
  • C言語では三目演算子は変数の値を返すので、左直
  • としては使用できません.
  • C++言語は変数そのものを返すので、左の値
  • とすることができる.
    #include 
    int main(void){
        int a = 10;
        int b = 20;
        
        int min_value = 0;
        
        (a < b ? a : b) = 30;
        
        printf("a = %d,b = %d 
    "
    , a, b); return 0; }

    出力結果
    a = 30,b = 20 
    

    原理:C++コンパイラはアドレスを取る操作をしました
    *(a < b ? &a : &b) = 30;