我正在学习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;
答案 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;
}