一、C++类的定义
C++中使用关键字class来定义类,其基本形式如下:
在声明之后,定义之前,只知道Screen是一个类名,但不知道包含哪些成员。
在创建类的对象之前,必须完整的定义该类,而不是声明类。所以,
类不能
因为在类定义之后可以接一个对象定义列表,可类比内置类型,定义必须以分号结束;
定义类对象时,将为其分配存储空间。
Sales_item item;//编译器分配了足以容纳一个Salea_item对象的存储空间。item指的
成员函数具有一个附加的隐含形参,即this指针,它由编译器隐含地定义。成员函数的
class //类名
{
public:
//行为或属性
protected:
//行为或属性
private:
//行为或属性
};
实例:
定义一个点(Point)类,具有以下属性和方法:
属性:x坐标,y坐标
方法:1、设置x,y的坐标值;2、输入坐标的信息。
实现代码:
class Point
{
public:
void setPoint(int x,int y);
void printtPoint();
private:
int xPos;
int yPos;
};
代码说明:
上段代码中定义了一个名为Point的类,具有两个私密属性,
int型的xPos和yPos,分别用来表示x点和y点。
在方法上,setpoint用来设置属性,也就是xPos和yPos的值;
printPoint用来输出点的信息。
1、数据抽象和封装
抽象是通过特定的实例抽取共同特征以后形成概念的过程。
一个对象是现实世界中一个实体的抽象,一个类是一组对象的抽象。
封装是将相关的概念组成一个单元,然后通过一个名称来引用
它。面对对象封装是将数据和基于数据的操作封装成一个整体对象,
对数据的访问或修改只能通过对象对外提供的接口进行。
2、类定义
几个重要的名词:
(1)类名
遵循一般的命名规则:字母,数字和下划线组合,不要以数字开头。
(2)类成员
类可以没有成员,也可以定义多个成员。成员可以是数据、函数或
类型别名。所有的成员都必须在类的内部声明。
没有成员的类空类,空类也占用空间。
class People
{
};
sizeof(People)=1;
(3)构造函数
构造函数是一个特殊的、与类同名的成员函数,用于给每个数据成员设置
适当的初始值。
(4)成员函数
成员函数必须在类内部声明,也可以在类内部定义,也可以在类外部定义。
如果在类内部定义,就默认是内联函数。
3、类定义补充
3.1 可使用类型别名来简化类
除了定义数据和函数成员外,类还可以定义自己的局部类型名字。
使用类型别名有很多好处,它让复杂的类型名字变得简单了、易于
理解和使用,还有助于程序员清楚地知道使用该类型的真实目的。
class People
{
public:
typedef std::string phonenum;//电话类型
phonenum phonePud;//公开电话
private:
phonenum phonePri;//私人电话
};
3.2成员函数可以被重载
可以有多个重载成员函数,个数不限。
3.3内联函数
有三种
(
1)直接在类内部定义。
(2)在类内部声明,加上inline关键字,在类外部定义。
(3)在类内部声明,在类外部定义,同时加上inline关键字。
注意:此种
情况下,内联函数的定义通常应该放在类定义的同一头文件中,而不是在
源文件中。这是为了保证内联函数的定义在调用该函数的每个源文件中是
可见的。
3.4访问限制
public, private, protected为属性/方法限制的关键字。
3.5类的数据成员中不能使用auto、extern和register等进行修饰,也不能
在定义时进行初始化
如
int xPos = 0;//错
例外:
静态常量整形(包括char,bool)数据成员可以直接在类的定义体中进
性初始化,例如:
static const int a = 30;
4类的声明与类定义
4.1类声明(declare)
class Screen;
只能以有限方式使用它,不能定义该类型的对象,只能用于定义指向该类型的指针
或引用,声明(不是定义)使用该类型作为形参类型或返回类型的函数。
void Test1(Screen&a){};
void Test1(Screen*a){};
4.2类定义(define)
具有自身类型的数据成员,但可以包含指向本类的指针或引用。
class LinkScreen
{
public:
Screen window;
LinkScreen* next;
LinkScreen* prev;
};//注意,分号不能丢
{
public:
};//注意,分号不能丢
class
LinkScreen{};
class
LinkScreen{} scr1,scr2;
5类对象
就是那个存储空间。
6.隐含的this指针
函数体可以显示使用this 指针。