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