c++ 类与对象
1、类的定义
class 类名 { private: 成员表1; public: 成员表2; protected: 成员表3; };//类体,以分号结束
private&protected 成员不能从外部进行访问
public 成员可以从外部进行访问
例如:
class dragon { int grade;//等级 int exp;//经验值 int power;//武力值 int fight;//战斗次数 int win;//战胜次数 long id;//系统编号,身份序列号 public: void set_id();//赋予身份序列号 void train();//训练,增加经验值、武力值 void upgrade();//宠物升级 void pk(dragon &ob);//一对一战斗 };
如果在类体起始点无访问说明符,系统默认为私有(private)
2、成员函数的定义
通常在类的定义中,成员函数仅作说明,函数定义通常在类的说明之后进行,格式如下:
返回值类型 类名::函数名(参数表) { ...... //函数体 }
void dragon::upgrade() { if (win>=10) {grade++; win=win-10;} }
3、类成员的访问
- 类外访问
类外函数-->类中public属性的成员
使用 “对象名.成员名” 方式访问
- 类中成员互访
成员函数-->任意类中成员
直接使用 “成员名”
4、构造函数
构造函数的作用:创建对象 初始化对象
对象的赋值:为对象的数据成员赋值
对象的初始化:在对象创建时为对象的数据成员赋值
class dragon { char sex;//性别 int grade;//等级 int exp;//经验值 int power;//武力值 int fight;//战斗次数 int win;//战胜次数 long id;//身份号 public: dragon( char Sex, int Grade, int Exp, int Power,int Fight, int Win ); //构造函数声明 dragon(); //默认构造函数声明 ………… };
构造函数是公有成员函数;
构造函数函数名与类名相同;
构造函数无函数返回类型说明。
//构造函数定义 dragon::dragon(char Sex, int Grade, int Exp, int Power, int Fight, int Win) { sex=Sex; grade=Grade; exp=Exp; power=Power; fight=Fight; win=Win; set_id(); cout<<"构造函数被调用"<<endl; } dragon::dragon(char Sex, int Grade, int Exp, int Power, int Fight, int Win) { sex=‘M’; grade=1; exp=0; power=100; fight=10; win=0; set_id(); cout<<"默认构造函数被调用"<<endl; } int main() { //使用构造函数,创建宠物对象blue_d并初始化 dragon blue_d('f',5,1300,400,30,29); //使用默认构造函数 dragon red_d; }
5、析构函数
class dragon { ……. public: dragon( char Sex=‘f’, int Grade=1, int Exp=0, int Power=0, int Fight=0, int Win=0 ); ~dragon( ) ; }; //析构函数定义 dragon::~dragon( ) { cout<<“析构函数被调用"<<endl; }
- 如果类说明中没有给出构造函数,则C++编译器自动给出一个默认的构造函数:类名( ){ }
- 若没有给出析构函数,也会给出一个默认的析构函数:~类名( ){ }
6、类的聚合
用其他类的对象作为类的数据成员。
class Point { public: Point(int xx=0,int yy=0){X=xx; Y=yy;} Point(Point &p) { X=p.X; Y=p.Y;} //复制构造函数 ~Point( ){ } int GetX() {return X;} //取对象的X坐标 int GetY() {return Y;} //取对象的Y坐标 private: int X,Y; //点的坐标 }; class Line //Line类的声明 { private: //私有数据成员 Point p1,p2; //Point类的对象p1,p2 int style; //线型 public: //使用坐标的构造函数 Line (int x1=0, int y1=0,int x2=0,int y2=0, int Ls=0); //使用点对象的构造函数 Line (Point a, Point b, int Ls=0); ………… };
含对象成员的构造函数的定义
类的对象成员必须使用初始化列表初始化
类名::类名(对象成员所需的形参,普通数据形参):对象1(参数),对象2(参数),...
{ 本类初始化 }
Line::Line(Point a, Point b, int Ls):p1(a),p2(b) { style=Ls; } Line::Line( int x1,int y1, int x2,int y2, int Ls):p1(x1,y1),p2(x2,y2) { style=Ls; }