VC++实验名称
实验一
实验目的:
1.了解并掌握VC编程环境的使用.
2.通过具体的编程掌握运算符的优先级和结合规律.
3.函数的定义和库函数的使用.
实验导读:
1.VC编程环境的使用,请参考"VC"
2.标识符的构成:数字,字母和下划线,数字不可作为开头.
3.了解运算符五个的要点,即:
a.运算功能;
b.运算对象的限制;
c.运算优先规则;
d.结合规律;
e.运算值的类型.
4.运算符主要有:算术运算符,关系运算符,逻辑运算符,复合赋值运算符,要掌握这些运算符的结合规律和优先级.
5.各种变量的声明形式.
实验内容:
1. 考查下列独立存在语句的正确性,并利用VC环境进行验证 设 a=2,b=2,c=2;A:a=-b+++c;B:a+=b-=c/=a-3;
2.利用VC环境找出下列程序中的错误,该程序的输出,结果是什么?
#include"iostream.h"
void main()
{ int x,y,z;
cout << "This is a test" << endl;
x=y=1;
if(x=y) count << "x=y";
else cout << "x=!y" << endl;
z=10;};
参考答案:
#include
main()
{
int a=2,b=2,c=2;
a=-b+++c;
cout<<"a=-b+++c a="
<
a=2,b=2,c=2;
a+=b-=c/=a-3;
cout<<"a+=b-=c/=a-3 a="
< int x,y,z;
cout<<"This is a test"
<<(x=y=1); //"This is a test"后的<改为<< //赋值运算符=优先级低于<<,应用圆括号括起
if( x==y ) cout<<"x=y/n";
//if(xcount<<"x=y<;
else cout<<"x!=y/n"<<(z=10);
//else ; cout<"x!=y'
/*程序执行结果
a=-b+++c a=0 b=3 c=2
a+=b-=c/=a-3 a=6 b=4 c=-2
This is a test1x=y
*/
实验二
实验目的:
1、掌握类的定义,包括:构造函数、析构函数、成员函数和数据成员。
2、了解并掌握对象成员的访问机制。
3、掌握在VC开发环境中的程序编译,执行。
实验导读:
1、类由三部分组成:公有、保护和私有,分别由关键字public、protected和private声明。在这些关键字后面要加冒号“:”。
2、类中的构造函数与类同名,没有返回值,它起到对类进行初始化的作用。
3、一个类的对象可以成为另一个类的成员,即对象成员,这样可以利用简单的类构成复杂的类。
4、对类定义中的常量、引用和对象成员可用初始化表来进行初始化。在具体的执行过程中,对象成员的构造函数首先被执行。
5、在创建对象时,可用拷贝构造函数进行初始化。如,student s1(s2);意味着创建一新的对象s1,且s1=s2。
6、类的私有成员只能由类本身和友元访问。类的保护成员可由类本身、派生类及友元访问。类的公共成员可由外部任意访问。
7、this指针是指向对象自己本身的指针。
实验内容:
1、在类time中加入成员函数settime(int h,int m,int s)用来对时间进行修改,并同时验证三整数h,m,s的有效性。
2、在类time中,修改函数print(),使时、分、秒的显示格式为二位,如,23:14:21代表23时14分21秒,01:14:05代表1时14分5秒。
实验三
实验目的:
1. 掌握友员的定义和使用。
2. 掌握派生类的定义和使用,虚基类的定义和使用。
实验导读:
有关友员类、友员成员函数和友员函数:
1. 友员有三种形式:友员类、友员成员函数和友员函数。
2. 友员可以访问并修改类的私有或保护数据,调用类的私有或保护成员函数,使类既具有封装性,又具有灵活性。
3. 友员关系不能传递,不是互逆的。
有关类的派生:
1. 基类和派生类体现了类之间的层次关系。派生类具有基类的所有成员。
2. 有三种派生类型:公有、保护和私有。对基类成员的访问有一定的规则。
3. 派生类的构造函数自动执行基类的构造函数,且基类的构造函数先执行。基类构造函数的参数由派生类传递。
4. 继承类具有基类的所有成员,并可对已有的成员进行重新定义。在派生类中访问基类的函数用::表明。
5 可定义多重派生类。且可利用虚基类使派生类只保持一个基类的成员拷贝。
实验内容:
1. 有类data-_rec和类student如下
#include
#include
class data_rec
{
public:
data_rec( ) { name=null; }
void insert_name( char *na)
{ delete [] name;
name=new char[strlen(na)+1];
strcpy(name, na); }
void print ( )
{ cout << "/n name:" << name; }
private:
char *name; };
//定义派生类 student
class student::virtual public data_rec
{ public:
student( ):data_rec( ) { id=0; } //构造函数
void insert_id(int pid) { id=pid;}
void print ( )
{
data_rec::print( ); //访问基类的函数
cout << "/n id=" << id;
}
请在data_rec类下定义派生类worker, 有私有数据“工资”,再定义worker 和student的多派生类“在职学生”wstudent,它们都有一个缺省构造函数和print( )函数,
请用虚基类消除数据冗余。
2. 调试下列程序,找出错误,并请用友员函数方法解决程序中的问题。
#include
class count
{
public:
count( ) { x=0; }
void print ( ) { cout << x << endl; }
priavte:
int x;
};
void setX( count &c, int val)
{
c.x=val;
}
void main( )
{
count obj;
obj.print( );
setX(obj, 9);
obj.print( );
return 0;
}
实验四
实验目的:
掌握虚函数的定义及应用,了解多态性的实现机制.
实验导读:
1. 基类中的虚函数是由virtual定义的: virtual void print( );
2. 在定义了虚函数之后, 其多态性在派生类中得到延伸。
3. 在定义了虚函数之后, 只要定义一个基类的指针,就可以调用子类的函数:
base *p;
derived obj;
p= &obj; // p 指向对象派生类 obj
p->print( ); // 动态联编,
//调子类成员函数
实验内容:
设定义了基类 shape, 和派生类 square及circle,其定义为:
class shape {
public:
virtual float area( )
{return 0.0; }
};
class square: public shape {
public:
square(float b=0) { s=b; }
float area( ){ return s*s; }
private:
float s;
};
class circle: public shape {
public:
circle(float a=0) { r=a;}
float area( ){ return 3.14*r*r; }
private: private:
ffloat r;
};
4.请在基类中加入虚函数 PrintShapeName 用来打印图形的名称,在派生类中同样加入该函数,并编写一main.cpp文件对上述加入的函数进行应用.