实验目的:1. 熟悉面向对象中的基本概念和术语
2. 掌握面向对象程序的基本结构
3. 学会定义并使用类和对象
4.设计比较完备的测试用例完成对小程序的测试
实验内容:(1)通过单步执行,观察其执行过程,并学会查看对象的取值;
(2)通过撞错,观察当程序发生错误时的各种表现.
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br>
* 作<wbr><wbr><wbr> 者:<wbr><wbr><wbr><wbr><wbr><wbr>雷恒鑫<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br>
* 完成日期:<wbr><wbr><wbr><wbr><wbr><wbr><wbr>2012<wbr> 年<wbr><wbr><wbr><wbr><wbr>02<wbr> 月<wbr><wbr><wbr><wbr><wbr>03<wbr><wbr> 日<br>
* 版 本号:<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><br>
* 对任务及求解方法的描述部分<br>
* 输入描述:1. 违反封装原则,直接给私有成员赋值、访问私有对象等;<br>
2.在实现对类成员函数时不指定作用域;<br>
3.调用 stud1.set_data()函数时,实参出现不当类型;</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
* 问题描述:.......
* 程序输出:......
* 问题分析:……
* 算法设计:……
#include <iostream>
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;
}
正确的运行结果:
测试用例设计及测试结果:
(1) 遵循“判定/条件测试”覆盖原则(设计足够的测试用例,使得判定表达式的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次),我设计了三组测试用例,测试方案及结果如下
A.违反封装原则,直接给私有成员赋值、访问私有对象
int main()
{
Student stud1,stud2;
num=1;
name[20]="he";
sex=f;
stud1.set_data(1,"He",'f');
stud2.set_data(2,"She",'m');
stud1.display();
stud2.display();
return 0;
}
调试结果:6 error(s):1.error C2065: 'num' : undeclared identifier
2.error C2440: '=' : cannot convert from 'char [3]' to 'int'
(2)在实现对类成员函数时不指定作用域;
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;
}
调试结果:3 error(s):1.error C2065: 'num' : undeclared identifier
2.error C2065: 'name' : undeclared identifier
3.error C2065: 'sex' : undeclared identifier
(3)调用 stud1.set_data()函数时,实参出现不当类型
int main()
{
Student stud1,stud2;
stud1.set_data(v,"He",'f');
stud2.set_data(o,"She",'m');
stud1.display();
stud2.display();
return 0;
}
调试结果:2 error(s):1.undeclared identifier
2.error C2065: 'o' : undeclared identifier
注意哟:
如果把“f”改为1,屏幕就会输出笑脸
int main()
{
Student stud1,stud2;
stud1.set_data(1,"He",1);
stud2.set_data(2,"She",2);
stud1.display();
stud2.display();
return 0;
}
哈哈,好玩吧。
经验积累:
1. 程序的测试也是技术活,需要考虑各种可能的情况,设计用于测试的输入,将执行结果与预期的结果对比后才能得出结论。程序工作并不是能输出结果(不管对错)就视为完成。
2.
上机感言:
撞错和测试都是很有用的。