第二周课程实践 阅读程序

来源:互联网 发布:js if else 简写 编辑:程序博客网 时间:2024/05/22 00:51
#include <iostream>#include <cstring>using namespace std;class Student{private:    int num;    char name[20];    char sex;public:    void set_data(int n, char *p,char s)    {        num=n;        strcpy(name,p);        sex=s;    }    void display( )    {        cout<<"num: "<<num<<endl;        cout<<"name: " <<name<<endl;        cout<<"sex: " <<sex<<endl;    }};int main(){    Student stud1,stud2;    stud1.set_data(1,"He",'f');    stud2.set_data(2,"She",'m');    stud1.display();    stud2.display();    return 0;}
<p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; color: rgb(85, 85, 85); font-family: 'microsoft yahei'; font-size: 15px; line-height: 35px;">问题:</p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; color: rgb(85, 85, 85); font-family: 'microsoft yahei'; font-size: 15px; line-height: 35px;"></p><p style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px; color: rgb(85, 85, 85); font-family: 'microsoft yahei'; font-size: 15px; line-height: 35px;"></p><ul style="color: rgb(85, 85, 85); font-size: 15px; line-height: 35px;"><li style="font-family: 'microsoft yahei';">程序中定义的类名是_Student.</li><li><span style="font-family:microsoft yahei;">在main</span><span style="font-family: 宋体;">函数中,定义的</span><span style="font-family: Calibri;">stud1</span><span style="font-family: 宋体;">和</span><span style="font-family: Calibri;">stud2</span><span style="font-family: 宋体;">称为</span><span style="font-family:Calibri;">  对象</span></li><li><span style="font-family:microsoft yahei;">该类中,num</span><span style="font-family: 宋体;">、</span><span style="font-family: Calibri;">name</span><span style="font-family: 宋体;">、</span><span style="font-family: Calibri;">sex</span><span style="font-family: 宋体;">称为类的  </span><span style="font-family:Calibri;">数据成员,</span><span style="font-family: 宋体;">其访问权限为</span><span style="font-family:Calibri;">  私有的</span><span style="font-family: 宋体;">,意味着</span><span style="font-family:Calibri;">  数据对外隐蔽</span><span style="font-family: 宋体;">。</span></li><li><span style="font-family:microsoft yahei;">该类中,set_data</span><span style="font-family: 宋体;">和</span><span style="font-family: Calibri;">display</span><span style="font-family: 宋体;">称为类的</span><span style="font-family:Calibri;">  成员函数</span><span style="font-family: 宋体;">,其访问权限为</span><span style="font-family:Calibri;">  公共的</span><span style="font-family: 宋体;">,意味着</span><span style="font-family:Calibri;">  函数在类外也可以被调用</span><span style="font-family: 宋体;">。</span></li><li style="font-family: 'microsoft yahei';">在<span style="font-family: Calibri;">main()</span><span style="font-family: 宋体;">函数</span>中26<span style="font-family: 宋体;">行</span>后,调用stud1.display();,将会出现什么结果?请解释原因。第一个name中不能显示结果。原因:此处stud.2 set_data() hanshu 尚未被调用。</li><li style="font-family: 'microsoft yahei';">请删除上面加的一行代码,在<span style="font-family: Calibri;">main()</span><span style="font-family: 宋体;">函数的</span>28<span style="font-family: 宋体;">行</span>后,调用stud2.sex='f';,记录提示的错误  char Student::sex 是私有的。<span style="font-family: 宋体;">为什么会这样?原因:私有的数据成员不能被类外函数直接调用。</span></li><li><span style="font-family:microsoft yahei;">将第9</span><span style="font-family: 宋体;">行</span><span style="font-family: Calibri;">char sex;</span><span style="font-family: 宋体;">移到第</span><span style="font-family: Calibri;">10</span><span style="font-family: 宋体;">行后面,即将</span><span style="font-family: Calibri;">sex</span><span style="font-family: 宋体;">成员声明为公共数据成员,再次编译程序。请解释不会出错的原因,并对这种做法进行评价。</span><span style="font-family:Calibri;">数据成员设置为私有的可增加数据的安全性。</span></li><li><span style="font-family:microsoft yahei;">将第</span><span style="font-family: Calibri;">6</span><span style="font-family: 宋体;">行</span><span style="font-family: Calibri;">private: </span><span style="font-family: 宋体;">去掉,结果是否发生变化,请解释原因。</span><span style="font-family:Calibri;">不变化</span></li><li><span style="font-family:microsoft yahei;">将第</span><span style="font-family: Calibri;">10</span><span style="font-family: 宋体;">行</span><span style="font-family: Calibri;">public: </span><span style="font-family: 宋体;">去掉,记录出现的情况,并解释原因。</span><span style="font-family:Calibri;">error.类对不进行声明的数据成员或函数默认为私有的,此处中函数从公共的变为私有的,因此无法进行访问。</span><pre name="code" class="cpp">
<pre name="code" class="cpp">#include <iostream>  #include <cstring>  using namespace std;  class Student  {  public:      void set_data(int n, char *p,char s);      void display( );  private:      int num;      char name[20];      char sex;  };  void Student::set_data(int n, char *p,char s)  {      num=n;      strcpy(name,p);      sex=s;  }  void Student::display( )  {      cout<<"num: "<<num<<endl;      cout<<"name: " <<name<<endl;      cout<<"sex: " <<sex<<endl;  }  int main()  {      Student stud1,stud2;      stud1.set_data(1,"He",'f');      stud2.set_data(2,"She",'m');      stud1.display();      stud2.display();      return 0;  }  

问题:

  • 概括这种写法的特点 成员函数的实现写在类定义之外
  • 在类定义中,公共成员在前,私有成员在后,有何好处? 明确先定义原则
  • 成员函数的实现写在类定义之外,有何好处?使语法明确
  • 将第5public: 去掉,记录出现的问题 出错,原因是 不声明的成员函数类类型默认为私有的。加上public,将程序改回正确状态。
  • 将第18void Student::display( )写作为void display( ),即去掉Student::,结果会是 错误Student::的作用是 作用域。将程序改回正确状态。
  • 在第30行后加一句:stud1.num=3,记录出现的情况,并解释原因 错误。num的访问权限是私有的
  • 去掉刚加的那一行,将第31stud1.display();中的stud1.去掉,记录出现的情况,并解释原因。 出错。没有明确说明对象
  • 在32行后增加cout<<sizeof(stud1)语句,看输出的结果,请做出解释__出现数字28 sizeof操作符以字节形式给出了其操作数的存储大小。
  • 初学者常将类定义后的分号丢掉,试将13行最后的分号去掉,记录出现的提示,并做出解释。__error。: expected ';' after class definition。
  • 你能想到的其他“坏”点子继续折腾吗?折腾出真知!


                                                 
    0 0
    原创粉丝点击