第二周课程实践 阅读程序

#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。
  • 你能想到的其他“坏”点子继续折腾吗?折腾出真知!



    
    
                    
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值