无法从函数返回值

时间:2016-09-23 23:55:13

标签: c++

我正在学习C ++中的继承并尝试从函数" age"中返回值。我回来的只有0.我花了好几个小时才想出来,但没有运气。这是我的代码。我非常感谢你们的任何帮助!

.h class

#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;

3 个答案:

答案 0 :(得分:3)

你的mom.print()会这样做:

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

所以这里的问题是:ag = 0

你妈妈。(40)这样做:

return a;

看,它没有将你妈妈的年龄保存到你的mom变量,它只会返回你传递的内容(这里是40),那么它怎么打印?

因此,有很多方法可以解决这个问题,如果你想要回到你妈妈的年龄,请做cout&lt;&lt; mom.age(40)in main() 或者,只是:

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

答案 1 :(得分:2)

函数age不会将值a赋给成员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以防止更改成员数据,只让“setter”不是常量。例如在你的代码中:class mother:

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

答案 2 :(得分:2)

你必须使用正确的setter和getter。使用setter更改年龄:

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

如果要检索值,请使用getter。

double getAge() const {
    return ag;
 }