第六章 类
1、类的定义
类是对具有相同属性和行为的一类客观事物的概括描述。是用户自定义的数据类型(程序设计语言角度)
类的定义包括行为和属性两个部分。
属性以数据表示,行为通过函数实现。
数据成员 属性
成员函数 行为
类定义的格式
class 类名{
public:
公有数据成员和成员函数;
protected:
保护数据成员和成员函数;
private:
私有数据成员和成员函数;
};
各成员函数的实现;
结束符要有,分号不能省略
类名第一个字母大写,加一个大写的C,见文望义
成员函数公有的
数据成员是私有的
注:
- 类的数据成员可以是其他类的对象,但不能以类自身的对象作为本类的成员,而类自身的指针和引用可以作为类的成员。
不存在嵌套定义 - 类与结构体的区别:
没有明确指定类成员的访问权限时,C++结构体的成员是公有的,而类的成员是私有的。
2、访问控制
public:
共有成员、类的外部接口
protected:
保护成员、仅允许本类数据成员及派生类成员函数访问
private:
私有成员、仅允许本类成员函数访问
3、成员函数
类的成员函数是实现类的行为属性的成员。
一般将成员函数声明为函数原型,在类外具体实现成员函数。
成员函数能够操作的数据:
1、本类的数据成员
2、函数内定义的局部变量(形参属于局部变量)
3、全局变量(不建议使用)
类的成员函数通过操作数据成员实现功能
成员函数的定义
返回值类型 类名::成员函数名(参数表)
{
函数体
}
成员函数首字母大写包含两个单词第二个大写
通过set/get函数对私有数据成员操作
4、对象
对象是类的实例或实体。
类与对象的关系,如同C++基本数据类型和该类型的变量之间的关系。
对象定义格式:
- 类名 对象名1,对象名2,对象名3,…,对象名n;
类的具体化,必须在定义了类之后,才可以定义类的对象。
5、类成员的访问
对象成员的访问包括:
- 圆点访问形式:对象名.公有成员
- 指针访问形式:对象指针变量名->公有成员
如何通过类使用方法:
#include<iostream.h>
class ptr_access {
public:
void setvalue(float a, float b) { x=a; y=b; }
float Getx() {return x;}
float Gety() {return y;}
void print()
{
cout<<"x="<<x<<endl;
cout<<"y="<<y<<endl;
}
private: //私有数据成员
float x,y;
};
int main()
{
float a1,a2;
ptr_access *ptr=new ptr_access;
ptr->setvalue(2,8); //通过指针访问公有成员函数
ptr->print();
a1=(*ptr).Getx(); //通过公有成员函数访问私有数据成员
a2=(*ptr).Gety();
cout<<"a1="<<a1<<endl;
cout<<"a2="<<a2<<endl;
return 0;
}
成员函数
如果操作需要从外界引入数据加形参
只对数据成员操作不加形参
类定义和使用时应注意:
- 在类的定义中不能对数据成员进行初始化。
- 类的任何成员都必须指定访问属性,一般将数据成员定义为私有成员或保护成员,将成员函数定义为公有成员。
- 类中的数据成员可以是C++语法规定的任意数据类型。
- 类的成员可以是其他类的对象,称为类的组合。但不能以类自身的对象作为本类的成员。
- 类定义必须以分号“;”结束
- class与struct的不同:
class中,成员缺省情况是private。
struct中,成员缺省情况是public。
内联函数
内联函数作用: 减少频繁调用小子程序的运行的时间开销
内联函数机制: 编译器在编译时,将内联函数的调用以相应代码代替
内联函数声明: inline 函数原型
注:
内联函数仅在函数原型作一次声明。
适用于只有1 ~ 5行的小函数
不能含有复杂结构控制语句 ,不能递归调用