第二课:C++经典知识回顾
一、类的定义与应用
在C语言中,我们学过结构体,用于将描述某一对象的若干变量包装成一个整体使用,但没有但没有将与该对象相关的函数包含进来。C语言中的结构体只能描述一个对象的特征(属性),不能描述一个对象的动作(方法)。在C++中,我们是通过类的定义来解决这个问题的,在类的定义中,不仅可以包含变量,还可以包含函数。
我们通过一段程序来讲解类的使用。
#include "iostream.h"
class CPoint
{
public:
int x1;
int y1;
void Output();
CPoint();
CPoint(int x2,int y2)
~CPoint();
private:
int x2;
int y2;
int *pCount;
};
//注意类和结构定义完后,一定要用";"号结尾,忘记";"是许多人常犯的错误。
//在c++中,//......用于注释一行,/*......*/可以注释多行。
void CPoint::Output()
{
if(pCount)
(*pCount)++;
else
{
pCount=new int;
*pCount=1;
}
cout<<"the first point is ("<<x1<<','<<y1<<')'<<endl;
cout<<"the second point is ("<<x2<<','<<y2<<')'<<endl;
}
CPoint::CPoint()
{
pCount=0;
cout<<"the first constructor is calling"<<endl;
}
CPoint::CPoint(int x2,int y2)
{
this->x2=x2;
this->y2=y2;
pCount=0;
cout<<"the second constructor is calling"<<endl;
}
CPoint::~CPoint()
{
if(pCount)
{
cout<<"你调用了Output成员函数共"<<*pCount<<"次"<<endl;
delete pCount;
}
else
cout<<"你还没有调用过Output成员函数"<<endl;
cout<<"the deconstructor is calling"<<endl;
}
void Output(CPoint pt)
{
cout<<"the first point is ("<<pt.x1<<','<<pt.y1<<')'<<endl;
//cout<<"the second point is ("<<pt.x2<<','<<pt.y2<<')'<<endl;
//上面被注释的语句会造成编译错误,因为不能从类的外部访问类中的私有成员。
}
void main()
{
if(1==1)//限定pt变量的有效范围
{
CPiont pt;
cout<<"请输入两个整数";
cin>>pt.x1>>pt.y1;
//pt.x2=10;
//pt.y2=10;
//上面被注释的语句会造成编译错误,因为不能从类的外部访问类中的私有成员。
pt.Output();
pt.Output();
pt.Output();//故意演示Output被调用多次的情况。
Output(pt);
}
CPoint pt(10,10);
pt.Output();
}
上面的代码定义了一个类CPoint,其中包含有变量,称之为成员变量,也包含有函数的声明,称之为成员函数。
在类定义之外,我们必须对成员函数进行实现,成员函数的实现格式为:
返回类型 类名::函数名(参数列表)
{
函数体代码
}
上面的代码也编写了一个名为Output的全局函数,注意与类CPoint中的Output成员函数区别。
上面的代码还编写了一个main主函数,其中的代码演示了如何使用CPoint类。
评论