上课不正常

时间:2014-02-05 15:03:17

标签: c++ class

我还在努力学习课程,但我创造了这个,而且我似乎得到了一些奇怪的数字,比如记忆编号或某些东西,我无法弄清楚什么是错的。

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

3 个答案:

答案 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成员变量未初始化,并且将包含看似随机的值。使用未初始化的值会导致未定义的行为