为了账号安全,请及时绑定邮箱和手机立即绑定

如果把类中的初始化函数也注释就会正常打印数值了,这是怎么回事呢?

#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;

class Student
{
public:
     void setName(string _name)
     {
        m_strName=_name;
     }
     string getName()
     {
         return m_strName;
     }
     void setGender(string _gender)
     {
         m_strGender = _gender;
     }
     string getGender()     {
         return m_strGender;
     }
     
     int getScore()
     {
         return m_iScore;
     }
     
     /*void initScore()
     {
         m_iScore = 0;
        
     }
      * */
     
     void study (int _score)
     {
         m_iScore += _score;
     }

private:
string m_strName;
string m_strGender;
int m_iScore;

};

int main()
{
    Student stu;
    //stu.initScore();
    stu.setName("z");
    stu.setGender("f");
    stu.study(5);
    stu.study(5);
    
    cout <<  stu.getName() << " " << stu.getGender() << " " << stu.getScore() << endl;
    return 0;
}

1.没有明白为什么没有初始化,score的值不正常,有study 函数来赋值呢。

stu.study(5);

void study (int _score)
     {
         m_iScore += _score;
     }

2.  把类中的初始化函数也注释就会正常打印数值了,这是怎么回事呢?


正在回答

1 回答

你问题问的不是很清楚,大概解释一下,类中的数据成员如果没有初始化,不同的编译器在分配内存空间会自动赋值,这个值有的编译器是0,有的编译器是一个随机数(一般是一个很大的数),所以跟study函数没有关系,以为m_iScore已经被赋值了。你的编译器应该是自动赋值为0,所以没有初始化函数也会正常打印数值,但如果再换一个编译器就不一定了。

0 回复 有任何疑惑可以回复我~
#1

helengood 提问者

谢谢回复。当main里没有调用初始化函数时会自动赋值随机值,可调用study函数时为什么没有改变这个值呢。当我把类定义的初始化函数注释了,这时也没有初始化成员变量,可是study函数成功赋值了。
2017-03-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(上)
  • 参与学习       103410    人
  • 解答问题       701    个

封装--面向对象的基石,本教程力求帮助小伙伴们即学即会

进入课程

如果把类中的初始化函数也注释就会正常打印数值了,这是怎么回事呢?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信