我还在努力学习课程,但我创造了这个,而且我似乎得到了一些奇怪的数字,比如记忆编号或某些东西,我无法弄清楚什么是错的。
#include <iostream>
#include <string>
using namespace std;
class JoesClass {
public:
int setAge(int age) {
return age;
}
void displayAge() {
cout << "your age is " << age << endl;
}
private:
int age;
};
int main()
{
JoesClass newobject;
newobject.setAge(40);
newobject.displayAge();
return 0;
}
答案 0 :(得分:6)
问题在于:
int setAge(int age) {
return age;
}
未设定年龄。它只返回你给它的值,而不更新类成员。你想要更像的东西:
void setAge(int age) {
this->age = age;
}
您可能想要更改参数名称,因此它不会隐藏类成员:
void setAge(int new_age) {
age = new_age;
}
您还应该养成将using namespace std;
置于全局命名空间中的习惯,并改为使std::cout
等标准库名称合格。虽然using指令可以节省一些混乱,但是当你声明与库中某些东西同名的东西时,它会引起问题。
答案 1 :(得分:3)
您只是返回调用者传入的age
。您需要将对象的age
成员变量设置为该值。
void setAge(int age)
{
this->age = age;
}
this
用于防止变量隐藏(您的成员变量名为“age”以及参数名称“age”)。你指的是哪个“年龄”?这是this
可用于明确声明“我想使用此对象的age
变量”的地方。
您可能还希望使用以下内容检查有效年龄来包装displayAge
方法:
void displayAge()
{
if (age != 0)
{
std::cout << "your age is " << age << std::endl;
}
}
并在构造函数中为您的age
变量指定一个默认值:
JoesClass()
{
this->age = 0; // Initial value is considered not a valid age
}
现在,当您创建课程时,您将拥有年龄的初始值。
答案 2 :(得分:0)
但是,您并非在age
函数中设置 setAge
变量。这意味着age
成员变量未初始化,并且将包含看似随机的值。使用未初始化的值会导致未定义的行为。