C++の':'と'::'
4756 ワード
1.コロン(:)の使い方
(1)機構内ビットドメインの定義(すなわち、この変数が数bit空間を占める)typedef struct_XXX{unsigned char a:4;unsigned char c;}を表す.XXX
(2)コンストラクション関数の後のコロンは分割の役割を果たし,クラスがメンバー変数に値を付与する方法であり,リストを初期化し,メンバー変数の定数const型により適している.struct _XXX{ _XXX() : y(0xc0) {}};(3)public:とprivate:の後のコロンは、次の「public:」または「private:」が現れるまで、後に定義されたすべてのメンバーが公有または私有であることを示す.「private:」はデフォルト処理です.(4)クラス名のコロンの後ろには,クラスの継承を定義するために用いられる.class派生クラス名:継承方式ベースクラス名{派生クラスのメンバー};継承方法:public、private、protected、デフォルト処理はpublicです.2.二重コロン(::)用法(1)は「ドメインオペレータ」を表す例:クラスAを宣言し、クラスAにメンバー関数void f()を宣言するが、クラスの宣言にfの定義が与えられていない場合、クラス外でfを定義する場合はvoid A::f()と書き、このf()関数がクラスAのメンバー関数であることを表す.(2)グローバル関数の前に直接使用し、グローバル関数の例を表す:VCでは、API関数を呼び出すことができ、API関数の名前に:(3)参照メンバー関数と変数を表し、役割ドメインメンバー演算子の例:System::Math::Sqrt()はSystemに相当する.Math.Sqrt()VCでは,C++の「役割ドメイン分解演算子」である.たとえばクラスAが宣言され、クラスAにメンバー関数voidf()が宣言されているが、クラスの宣言にfの定義が与えられていない場合、クラス外でfを定義する場合はvoidA::f()と書き、このf()関数がクラスAのメンバー関数であることを示す.::一般的には、グローバル関数の前に直接使用し、グローバル関数であることを表す方法もあります.クラスのメンバー関数がクラス外のグローバル関数と同名である場合、試験では、クラス内で定義するように大きなヒントを与えた場合、この関数名を打つとデフォルトで呼び出されるのは自分のメンバー関数です.同じ名前のグローバル関数を呼び出す場合は、区別を示すために::を打たなければなりません.例えばVCでは、API関数を呼び出すときに、API関数の名前に次のように追加できます.
この記事ではC/C++のコロンの使い方をまとめます.1、ビットドメイン定義これは前述のビット構造体に関する文章で十分に述べられており、二度と繰り返さない.2、クラスコンストラクタ(Constructor)の初期化リストコンストラクタとは、クラスと同名の関数であり、通常の関数との違いは、タイプが戻っていないことである.コンストラクタの後ろには、コロンと初期化リストが続き、各初期化変数間はカンマ(,)で区切られている.次に例を挙げます.class myClass{public:myClass();//コンストラクション関数、戻りタイプなし、パラメータリストあり、ここで~myClass();//コンストラクション関数int a;const int b;}myClass::myClass():a(1),b(1)//初期化リスト{}上の例はコロンのこの使い方を示しており,説明:1)初期化リストの役割はコンストラクション関数内で対応するメンバー変数の付与に相当するが,両者には差がある.初期化リストでは変数を初期化し、コンストラクション関数では付与操作を行います.両方の差はconstタイプデータのような操作で特に顕著である.const型の変数は定義時に初期化されなければならず、const型の変数に値を割り当てることはできないことを知っています.したがってconstタイプのメンバー変数は、初期化リストでのみ初期化できます.すなわち、myClass::myClass(){a=1;//そう、初期化リストでb=1を初期化することに相当します.//エラー、const変数は値付与操作ができません.}2)初期化の順序はメンバー変数の声名の順序と同じである.まず、以下のプログラムを見てみましょう.myClass::myClass():b(1)、a(b){}という実行結果a、bはそれぞれいくらですか.b=1,a=1?いいえ、b=1でaは乱数です.この点はかなり重要ですよ.一般的に初期化リストで初期化を行う場合、初期化の順序は宣言された順序と一致し、不要なエラーが発生しないようにします.3)継承されたクラスについては,初期化リストでベースクラスの初期化を行うことも可能であり,初期化の順序はまずベースクラスを初期化し,その後そのクラス自身の変数の宣言順序に従って初期化を行う.3、ベースクラスを宣言します.クラスを再定義し、myClassクラスから継承するとします.定義方法は以下の通りである:class derivedClass:public myClass{//略}ここのコロンは声名ベースクラスの役割を果たし、ベースクラス名の前にpublic/private/protectedなどのラベルを付けて継承のタイプを識別したり省略したりすることができ、省略するとclassで定義されたクラスはprivateとデフォルトで、structで定義されたクラスはpublicとデフォルトで、具体的なラベルの違いについてはここでは言いません.初期化リストと同様に、ここでは複数のベースクラスを声名で呼び、各ベースクラス間をカンマ(,)で区切ることもできます.4、条件文(?:)と?条件文を構成し、if elseに相当し、以下のように作用する.int a,b,c;a=3;b=2;c=a>b?a:b;//a>bが成立すると、逆aがcに付与され、そうでないとbがc条件文に付与される構造は、条件式?式1:式2条件式がtrueの場合、式の値は式1の値であり、そうでない場合は式2の値である.何時説明:1)?ネストはできますが、int max=i>jは推奨されません.i>k ? i : k : j>k ? j : k; 2)?:優先度int i=3が低い.int j = 2;cout << i>j?i:j;//エラー、<<より>の優先度が高く、実行順序は((cout<j)?i:jは、cout<j)?i:j;//1または0を出力し、(cout<<(i>j))を判定条件として式の値をiまたはjと決定し、cout<<(i>j)、i>jは1を出力しないと0とし、(cout<<(i>j))を?とする.の条件で、coutが正しく実行されている場合は1(true)、そうでない場合は0(false)で、式の値がiまたはjcout<(i>j?i:j);//i>jはiを出力し、そうでなければjを出力し、式値がtrueの場合coutが正しく実行され、そうでなければfalseの優先度に関する多くの問題は言わない.5、文のラベルは通常gotoと協力して使用し、例えばstep 1:a=f 1();...goto step1; このようなやり方もあまりお勧めではありません.なぜなら、文の順序を破壊して実行する代価であることはよく知られているでしょう.しかし、存在は合理的ですか.それがまだ存在する以上、その役に立つメリットがあるに違いありません.例えば、多層ネストの脱退(break continueより直感的になるでしょう)は、コードなどを繰り返す6、switch文のcase後も避けることができます.これは言うまでもなく、できなければ、私も言うことはありません.7、アセンブリ命令テンプレートは参考にしてください.http://developer.e800.com.cn/articles/2006/43/1144846933898_1.html
1、役割ドメイン記号::の前は一般的にクラス名で、後ろは一般的にこのクラスのメンバー名で、C++は例として異なるクラスに同じ名前のメンバーがいることを避けて、役割ドメインの方式で区別します:A、Bは2つのクラスを表して、A、Bの中ですべてメンバーmemberがあります.ではA::memberはクラスAのメンバーmemberを表しますB::memberはクラスBのメンバーmember 2、グローバル役割ドメイン記号を表します:グローバル変数がローカル関数の中である変数と重複する場合、以下のように区別することができます:char zhou;//グローバル変数void sleep(){char zhou;//ローカル変数char(ローカル変数)=char(ローカル変数)*char(ローカル変数);:char(グローバル変数)=::char(グローバル変数)*char(ローカル変数);3::C++の「役割ドメイン分解演算子」です.たとえばクラスAが宣言され、クラスAにメンバー関数voidf()が宣言されているが、クラスの宣言にfの定義が与えられていない場合、クラス外でfを定義する場合はvoidA::f()と書き、このf()関数がクラスAのメンバー関数であることを示す.たとえば
(1)機構内ビットドメインの定義(すなわち、この変数が数bit空間を占める)typedef struct_XXX{unsigned char a:4;unsigned char c;}を表す.XXX
(2)コンストラクション関数の後のコロンは分割の役割を果たし,クラスがメンバー変数に値を付与する方法であり,リストを初期化し,メンバー変数の定数const型により適している.struct _XXX{ _XXX() : y(0xc0) {}};(3)public:とprivate:の後のコロンは、次の「public:」または「private:」が現れるまで、後に定義されたすべてのメンバーが公有または私有であることを示す.「private:」はデフォルト処理です.(4)クラス名のコロンの後ろには,クラスの継承を定義するために用いられる.class派生クラス名:継承方式ベースクラス名{派生クラスのメンバー};継承方法:public、private、protected、デフォルト処理はpublicです.2.二重コロン(::)用法(1)は「ドメインオペレータ」を表す例:クラスAを宣言し、クラスAにメンバー関数void f()を宣言するが、クラスの宣言にfの定義が与えられていない場合、クラス外でfを定義する場合はvoid A::f()と書き、このf()関数がクラスAのメンバー関数であることを表す.(2)グローバル関数の前に直接使用し、グローバル関数の例を表す:VCでは、API関数を呼び出すことができ、API関数の名前に:(3)参照メンバー関数と変数を表し、役割ドメインメンバー演算子の例:System::Math::Sqrt()はSystemに相当する.Math.Sqrt()VCでは,C++の「役割ドメイン分解演算子」である.たとえばクラスAが宣言され、クラスAにメンバー関数voidf()が宣言されているが、クラスの宣言にfの定義が与えられていない場合、クラス外でfを定義する場合はvoidA::f()と書き、このf()関数がクラスAのメンバー関数であることを示す.::一般的には、グローバル関数の前に直接使用し、グローバル関数であることを表す方法もあります.クラスのメンバー関数がクラス外のグローバル関数と同名である場合、試験では、クラス内で定義するように大きなヒントを与えた場合、この関数名を打つとデフォルトで呼び出されるのは自分のメンバー関数です.同じ名前のグローバル関数を呼び出す場合は、区別を示すために::を打たなければなりません.例えばVCでは、API関数を呼び出すときに、API関数の名前に次のように追加できます.
この記事ではC/C++のコロンの使い方をまとめます.1、ビットドメイン定義これは前述のビット構造体に関する文章で十分に述べられており、二度と繰り返さない.2、クラスコンストラクタ(Constructor)の初期化リストコンストラクタとは、クラスと同名の関数であり、通常の関数との違いは、タイプが戻っていないことである.コンストラクタの後ろには、コロンと初期化リストが続き、各初期化変数間はカンマ(,)で区切られている.次に例を挙げます.class myClass{public:myClass();//コンストラクション関数、戻りタイプなし、パラメータリストあり、ここで~myClass();//コンストラクション関数int a;const int b;}myClass::myClass():a(1),b(1)//初期化リスト{}上の例はコロンのこの使い方を示しており,説明:1)初期化リストの役割はコンストラクション関数内で対応するメンバー変数の付与に相当するが,両者には差がある.初期化リストでは変数を初期化し、コンストラクション関数では付与操作を行います.両方の差はconstタイプデータのような操作で特に顕著である.const型の変数は定義時に初期化されなければならず、const型の変数に値を割り当てることはできないことを知っています.したがってconstタイプのメンバー変数は、初期化リストでのみ初期化できます.すなわち、myClass::myClass(){a=1;//そう、初期化リストでb=1を初期化することに相当します.//エラー、const変数は値付与操作ができません.}2)初期化の順序はメンバー変数の声名の順序と同じである.まず、以下のプログラムを見てみましょう.myClass::myClass():b(1)、a(b){}という実行結果a、bはそれぞれいくらですか.b=1,a=1?いいえ、b=1でaは乱数です.この点はかなり重要ですよ.一般的に初期化リストで初期化を行う場合、初期化の順序は宣言された順序と一致し、不要なエラーが発生しないようにします.3)継承されたクラスについては,初期化リストでベースクラスの初期化を行うことも可能であり,初期化の順序はまずベースクラスを初期化し,その後そのクラス自身の変数の宣言順序に従って初期化を行う.3、ベースクラスを宣言します.クラスを再定義し、myClassクラスから継承するとします.定義方法は以下の通りである:class derivedClass:public myClass{//略}ここのコロンは声名ベースクラスの役割を果たし、ベースクラス名の前にpublic/private/protectedなどのラベルを付けて継承のタイプを識別したり省略したりすることができ、省略するとclassで定義されたクラスはprivateとデフォルトで、structで定義されたクラスはpublicとデフォルトで、具体的なラベルの違いについてはここでは言いません.初期化リストと同様に、ここでは複数のベースクラスを声名で呼び、各ベースクラス間をカンマ(,)で区切ることもできます.4、条件文(?:)と?条件文を構成し、if elseに相当し、以下のように作用する.int a,b,c;a=3;b=2;c=a>b?a:b;//a>bが成立すると、逆aがcに付与され、そうでないとbがc条件文に付与される構造は、条件式?式1:式2条件式がtrueの場合、式の値は式1の値であり、そうでない場合は式2の値である.何時説明:1)?ネストはできますが、int max=i>jは推奨されません.i>k ? i : k : j>k ? j : k; 2)?:優先度int i=3が低い.int j = 2;cout << i>j?i:j;//エラー、<<より>の優先度が高く、実行順序は((cout<j)?i:jは、cout<j)?i:j;//1または0を出力し、(cout<<(i>j))を判定条件として式の値をiまたはjと決定し、cout<<(i>j)、i>jは1を出力しないと0とし、(cout<<(i>j))を?とする.の条件で、coutが正しく実行されている場合は1(true)、そうでない場合は0(false)で、式の値がiまたはjcout<(i>j?i:j);//i>jはiを出力し、そうでなければjを出力し、式値がtrueの場合coutが正しく実行され、そうでなければfalseの優先度に関する多くの問題は言わない.5、文のラベルは通常gotoと協力して使用し、例えばstep 1:a=f 1();...goto step1; このようなやり方もあまりお勧めではありません.なぜなら、文の順序を破壊して実行する代価であることはよく知られているでしょう.しかし、存在は合理的ですか.それがまだ存在する以上、その役に立つメリットがあるに違いありません.例えば、多層ネストの脱退(break continueより直感的になるでしょう)は、コードなどを繰り返す6、switch文のcase後も避けることができます.これは言うまでもなく、できなければ、私も言うことはありません.7、アセンブリ命令テンプレートは参考にしてください.http://developer.e800.com.cn/articles/2006/43/1144846933898_1.html
1、役割ドメイン記号::の前は一般的にクラス名で、後ろは一般的にこのクラスのメンバー名で、C++は例として異なるクラスに同じ名前のメンバーがいることを避けて、役割ドメインの方式で区別します:A、Bは2つのクラスを表して、A、Bの中ですべてメンバーmemberがあります.ではA::memberはクラスAのメンバーmemberを表しますB::memberはクラスBのメンバーmember 2、グローバル役割ドメイン記号を表します:グローバル変数がローカル関数の中である変数と重複する場合、以下のように区別することができます:char zhou;//グローバル変数void sleep(){char zhou;//ローカル変数char(ローカル変数)=char(ローカル変数)*char(ローカル変数);:char(グローバル変数)=::char(グローバル変数)*char(ローカル変数);3::C++の「役割ドメイン分解演算子」です.たとえばクラスAが宣言され、クラスAにメンバー関数voidf()が宣言されているが、クラスの宣言にfの定義が与えられていない場合、クラス外でfを定義する場合はvoidA::f()と書き、このf()関数がクラスAのメンバー関数であることを示す.たとえば
class CA {
public:
int ca_var;
int add(int a, int b);
int add(int a);
};
// , :
int CA::add(int a, int b)
{
return a + b;
}
// , , :
int CA::add(int a)
{
return a + ::ca_var;
}
// ca_var。