类是一个包含函数的结构体。因此,累的定义与结构类型的定义相似,格式如下:
class 类名
{
public:
公有数据成员或公有函数成员的定义;
protected:
保护数据成员或保护函数成员的定义;
private:
私有数据成员或私有函数成员的定义;
};
class表明定义的是一个类;
public,protected,private,为存取控制属性(访问权限),用来控制对累的成员的存取。如果前面没有表明访问权限,默认访问权限为private;
类的成员与函数成员两类,称为属性;函数成员是描述类行为称作方法。函数成员由函数构成,这些作为类成员的函数因此也叫成员函数。
注意:与结构类型一样,类的定义也要以分号“;”结尾。
//
1数据成员:
类定义中的数据成员描述了类对象所包含的数据类型,数据成员的类型可以使c++基本数据类型,也可以是构造数据类型。
例如:
struct record
{
char name[20];
int score;
};
class team
{
private:
int num;//基本数据类型
record *p;//构造数据类型
};
注意:因为类知识一种类型,类中的数据成员不占内存空间,因此在定义数据成员时不能给数据成员赋初值。
类的数据成员除了可以使用前面讲述的c++类型外,还可以使用自己定义完整的类的类型。
在定义的类中,由于该类型没有定义完整,所以能定义该类型的变量,只能定义该类类型的指针成员以及该类类型的引用成员:
例如:
class team;
class grade{
team a;//使用了已定义的类类型
grade *p;// 使用正在定义的类类型定义指针成员
grade &r;//使用正在定义的类类型定义引用成员
grade b;// 错,使用了未完成定义的grade类定义变量
}
成员函数:
作为类成员的成员函数描述了对类中的数据成员实施的操作。成员函数的定义,声明格式与非成员函数(全局函数)的格式相同。成员函数可以放在类中定义,也可以放在类外。放在类中定义的成员函数为内联(inline)函数。
clock类中的成员函数就是放在类内定义的。
c++可以在内类声明函数的原型,在类外定义函数体。这样做的好处是相当于在类内列了一个函数功能表,使我们对类的成员函数的功能一目了然,避免了在各个函数实现的大堆代码中查找函数的定义。
类外定义函数体:
返回类型 类名:: 成员函数名(形参表)
{
函数体;
}
::类的作用域分辨符,表明函数是属于哪一个类的(前面那个类)
例如:
class clock{
private:
int H, M, S;
public:
void settime(int h, int m, int s);
void showtime();
};
void clock::settime(int h, int m, int s)
{
H=h,M=m,S=s;
}
inline void clock::showtime()
{
cout<<":"<<M<<":"<<S<<endl;
}//如果想编译成内联函数 在前面加 inline
//成员函数随便使用类的成员,还可以使用该类定义的变量
例如:
class clock{
private:
int H, M, S;
public:
clock addtime(clock c){
clock t;
、、、、
return t;
}
}
类作用域:
类是一组数据成员和函数成员的集合,类作用域作用域类中定义的特定的成员,包括数据成员与成员函数,类内的每一个成员都具有类作用域。实际上,类的封装作用也就是限制类的成员气访问范围局限之类的作用域之内。
///
对象的建立与使用
类相当与一中包含函数的自定义数据类型,他不占内存,是一个抽象的"虚",使用已定义的类建立对象就像用数据类型定义变量一样。对象建立后,对象占据内存,变成了一个“实体”,雷雨对象的关系就像数据类型与变量的关系。其实,一个变量就是一个简单的不含成员函数的数据对象。
格式:
类名 对象名;
对象名可以使简单的表示符,也可以是数组
例如:
clock myclock;
建立了一个clock型的对象myclock
建立对象后,就可以通过对象存取对象中的数据成员,调用成员函数,存取语法:
对象名.属性
对象名.成员函数名(实参,、、、、、)
通过对象myclock使用成员函数settime()
myclock。settime(8,30,30);
对于数据成员HMS的存取,以为存取限制是private而被保护,所不能直接存取,,,,,,
public:公开:该类成员以及所有对象
protected:保护:该类及其子类成员
private:私有:该类成员