2016-09-23 25 views
0

私はC++で継承を学習しており、関数 "age"から値を返そうとしています。私が戻ってくるのはすべて0です。私は理解するのに何時間も費やしましたが、運はありません。これは私のコードです。これについて私は大いに感謝します!関数から値を返すことができません

.Hクラス

#include <stdio.h> 
#include <string> 
using namespace std; 

class Mother 
{ 
public: 
    Mother(); 
    Mother(double h); 

    void setH(double h); 
    double getH(); 

    //--message handler 
    void print(); 
    void sayName(); 
    double age(double a); 

private: 
    double ag; 
}; 

の.cpp

#include <iostream> 
#include <string> 
#include "Mother.hpp" 
#include "Daughter.hpp" 
using namespace std; 

Mother::Mother(){} 

Mother::Mother(double h) 
{ 
    ag=h; 

} 

void setH(double h){} 
double getH(); 

void Mother::print(){ 
    cout<<"I am " <<ag <<endl; 
} 


void Mother::sayName(){ 
    cout<<"I am Sandy" <<endl; 
} 

double Mother::age(double a) 
{ 
    return a; 
} 

#include <iostream> 
#include "Mother.hpp" 
#include "Daughter.hpp" 
using namespace std; 

int main(int argc, const char * argv[]) { 
    Mother mom; 
    mom.sayName(); 
    mom.age(40); 
    mom.print(); 

    //Daughter d; 
    //d.sayName(); 
    return 0; 
+1

Mother :: ageは 'this-> ag'を設定する予定ですか?今すぐ返すだけです。 – Falmarri

+0

申し訳ありませんが、私はあなたのコメントを理解していない、詳細を教えてくださいできますか?ありがとう! – familyGuy

+1

あなたが私のコメントを理解していなければ、C++を学ぶ上でさらに前に戻る必要があるようです。継承について学ぶ前に、オブジェクト、変数、値、メソッドについて学ぶ必要があります。 – Falmarri

答えて

2

機能年齢部材AGに値を代入しないが、代わりに、それは、値aを返しそれはパラメータとして、それは悪いことです。

cout << mom.age(40) << endl; // 40 

それあなたが年齢を機能し、正しい変更するために:私はメインの書き込みに言いたいものを得るために

double Mother::age(double a) 
{ 
    ag = a; 
    return a; // it's redundant to do so. change this function to return void as long as we don't need the return value 
} 

***あなたが行う必要があります別のもの:

メイク"getters" constはメンバデータの変更を防ぎ、 "setters"を定数にしません。例えば、あなたのコード内:クラスの母:

cout<<"I am " <<ag <<endl; 

そこでここでは問題がある:AG = 0

あなたmom.age(40

double getH()const; // instead of double getH() const prevents changing member data "ag" 
+0

ありがとう@ Raindrop7。それはそれをした! – familyGuy

+0

@familyGuyようこそ!それが働いた場合、受け入れられた答えとする – Raindrop7

3

あなたmom.print()この行います)このん:

return a; 

を参照してください、それはあなたのmom変数にあなたのお母さんの年齢を保存しません、それはあなたが(彼女のパス何を返しますeは40です)、どうすれば印刷できますか?あなただけの、(メイン) またはIN < < mom.age(40)COUT行い、あなたのお母さんの年齢を返すようにしたい場合は

したがって、これを解決するために多くの方法があります:

void Mother::age(double a) 
{ 
    ag = a; 
} 
2

ます正しくセッターとゲッターを使用する必要があります。このように年齢を変更するにはセッターを使用します。

void setAge(const double &_age) { 
    ag = _age; 
} 

値を取得する場合は、ゲッターを使用します。

double getAge() const { 
    return ag; 
} 
関連する問題