2016-12-29 18 views
-1

私はYouTubeチュートリアルに従いましたが、基本クラスを作成できますが、このチュートリアルではClass :: Classがどのように機能するのか説明していません。私はgoogleを検索しますが、単項演算子と呼ばれます私はクラスについて何をしているのか分からないのですが、これについて説明してくれてありがとうと助けてください。あなたのクラスでC++単項演算子はクラスの意味で何を使用しますか?

#include <iostream> 
#include <string> 

//Class 
class Mother { 

    public: 
     void msg(); 

}; 

void Mother::msg(){ //This is where i don't undrstand 
    std::cout << "Go home early sweetie" << std::endl; 
} 

class Daughter: public Mother { 

    public: 
     void getMsg(); 

}; 

void Daughter::getMsg(){ //Same as this 
    std::cout << "Mom said "; 
    msg(); 
} 


//Main 
int main() { 

    Daughter lucy; 
    lucy.getMsg(); 

    return 0; 
} 
+0

コードに単項演算子が表示されませんが、 'Mother :: msg'と' Daughter :: getMsg'の関数の前でクラス名を尋ねると、関数が定義されていることに注意してくださいクラス宣言の外側。したがって、メンバー関数を定義する場合、クラスの名前を指定する必要があります。そうでない場合、関数はグローバルになります。これはあなたが求めていることですか?なぜ「Mother ::」がそこにあるのですか?または、コンストラクタについて質問していますか? –

+0

はい@カールステン、私は関数の前でクラス名について質問しています – ShadowLegend

+0

また、どういう意味ですか? 'Class :: Class:var {...}'は、変数がクラスの中で定義されていることを意味しますか?あなたが言ったことと同じ概念ですか? – ShadowLegend

答えて

0

、あなたはメンバ関数msg()を宣言しますが、実際にそこにそれを定義していない:

class Mother { 
public: 
    void msg(); 
}; 

通常この宣言は、.hファイルになり、そして今あなたがしたいです関数定義を.cppファイルに置きます。しかし、メンバー関数ではなくグローバル関数を定義するため、

を.cppファイルに書き込むことはできません。また、この時点でいくつかのクラスを宣言できるので、コンパイラはメンバー関数を実際に定義しようとしていることを知ることができません。ですから、関数がMotherクラス内に住んコンパイラに伝える方法が必要になります。

void Mother::msg() 
{ 
    //.. 
} 

同じ構文が名前空間のために使用されています。

std::string myString; 

EDIT: 特殊機能は、クラスと同じ名前を持つコンストラクタ、あるstd名前空間からクラスstringしてください。定義は次のようになります。

Mother::Mother() 
{ 
    // .. 
} 

このコンストラクタでは、メンバー変数を初期化して一般的にクラスインスタンスを設定できます。すべてのメンバ変数はその時点で作成されます。では、引数をそのコンストラクタに渡したい型のメンバ変数があればどうでしょうか?

Mother::Mother() : 
    var(1) 
{ 
    // .. 
} 

のでvarのコンストラクタがMotherのコンストラクタの本体の前に呼び出され、そしてあなたがそれに引数を渡すことができます:あなたはintを取るコンストラクタでメンバーvarを持っていると言います。

0

Class::Class()は単項演算子ではありません。Classというクラスのdefault constructorです。言い換えれば、それはあなたのような文を持っているときに実行されますコードです:

Class my_instance; 

または

Class another_instance(); 

通常、データフィールドを初期化したり、システムリソースを割り当て、デフォルトコンストラクタ内のコード。デフォルトのコンストラクタ(または実際のコンストラクタ)の対応部分は、デストラクタであり、通常はリソースを解放するClass::~Class()と表示されます。もちろん、コンストラクタやデストラクタは、あらゆる種類の処理を行うことができます。他の関数と同様のボディを持っています。

私がコード例(msg()メソッドを使用して)であなたを助けているかどうかは分かりませんが、これがあなたの質問を始めたので、これが役に立ちます。

関連する問題