C++言語-02-関数
4008 ワード
一般関数 C++の一般関数はC言語の一般関数と類似の性質を有する.以下のブログを参照してください:C言語-04-関数 クラスに関連する関数構造関数とコピー構造関数 コンストラクタ は、クラスを使用してオブジェクトを作成するときに実行される特殊なメンバー関数で、通常、オブジェクトを作成するときに特定のメンバー変数の初期値を設定するために使用されます. 構造関数の定義仕様 関数名はクラス名と同じ は、 の値を返しません.
構造関数の種類 無パラメトリック構造関数 パラメトリック構造関数 は、初期化リストを使用してフィールド を初期化することができる.
定義方式 コピーコンストラクタ は、オブジェクトを作成し、同じクラスの前に作成するオブジェクトを使用して、新しく作成するオブジェクト を初期化する特殊な構造関数です.コピーコンストラクション関数が呼び出されたシーン 新しく作成するオブジェクト を初期化するために別の同じタイプのオブジェクトを使用する.付与オブジェクトは、パラメータとして関数 に渡す.はオブジェクトを割り当て、関数からこのオブジェクト を返す.
注意 コピーコンストラクタが定義されていない場合、コンパイラは自動的に1つを定義します.しかし、場合によっては、コピー構造関数を定義する必要があります. クラスにはポインタタイプのメンバー変数があり、動的メモリ割り当て がある.
定義方式
構造関数 は、クラスのイメージが破棄するときに実行される特殊なメンバー関数であり、通常、プログラムから飛び出す前にリソース を解放するために使用される.構造関数の定義仕様 関数名はクラス名と同じであり、関数名に波号(~)を接頭辞 として付ける必要がある.は、パラメータ を持たない値を返さない.
定義方式 友元関数 クラスの外部に定義され、クラスのプライベートメンバーと保護メンバーにアクセスする権限を持つ関数 定義方式 注意 友元関数はメンバー関数ではありません.thisポインタ は使用できません.
インライン関数 コンパイルフェーズでは、コンパイラは、inlineキーワード定義を使用して、以下の のように、インライン関数のコードコピーをインライン関数を呼び出す各場所にコピーする.インライン関数の注意事項 クラス定義で定義された関数は、inlineキーワード が使用されていなくても、デフォルトでは2つの関数です.インライン関数を変更するたびに、その関数のすべての呼び出しコード(置換関数呼び出しの古いインライン関数のコピー) を再コンパイルする必要があります.
例 定義Animalクラス Animalクラスのメタ関数 を定義する main()関数
C++ C , C
C OOP , OOP ,C++ 。
//
ClassName() {
// body of the function
}
// ,
ClassName(MemberVariableType memberVariable) : variable(memberVariable) {
// body of the function
}
ClassName(const ClassName &classInstance) {
variable = classInstance.variable
}
```
~ClassName() {
// Release the resource of the classInstance
}
```
//
friend returnType functionName();
// , ::
returnType functionName() {
body of the function;
}
inline returnType functionName() {
// body of the function
}
class Animal {
private:
string name; //
int *age; //
public:
// set
inline void setName(string animalName) {
name = animalName;
}
void setAge(int animalAge) {
*age = animalAge;
}
//
Animal() {
cout << "Normal constructor" << endl;
//
age = new int;
}
//
Animal(string animalName, int animalAge) {
cout << "Normal constructor with parameter" << endl;
name = animalName;
//
age = new int;
*age = animalAge;
}
//
Animal(const Animal &animal) {
cout << "Copy constructor" << endl;
name = animal.name;
//
age = new int;
*age = *animal.age;
}
//
friend void printAnimal(const Animal animal);
//
~Animal() {
cout << "Release the resource of the classInstance" << endl;
delete age;
}
};
//
void printAnimal(const Animal animal) {
cout << " :" << animal.name << " :" << *animal.age << endl;
}
int main(int argc, const char * argv[]) {
// Animal
Animal dog1;
dog1.setName("TOBY");
dog1.setAge(5);
// dog1
printAnimal(dog1);
// Animal
Animal dog2("MAX", 4);
// dog2
printAnimal(dog2);
// Animal
Animal dog3 = dog2;
printAnimal(dog3);
return 0;
}