第3章类和对象
类
类的定义
类中成员函数的定义
对象
构造函数和析构函数
构造函数
析构函数
类的聚集—对象成员
静态成员
指向类成员的指针
综合举例
类
类是C++的数据抽象和封装机制,它描述了一组具有相同属性(数据成员)和行为特征(成员函数)的对象。
对象是类的实例。类是对一组具有相同特征的对象的抽象描述,所有这些对象都是这个类的实例。
类提供了完整的解决特定问题的能力,因为类描述了数据结构(对象属性)、算法(对象行为)和外部接口(消息协议)。
在C++语言中,一个类的定义包含数据成员和成员函数两部分内容。
类由三部分组成:类名、数据成员和成员函数。
class 类名
{
private:
// 私有数据成员和成员函数
public:
// 公有数据成员和成员函数
protected:
// 保护的数据成员和成员函数
};
有关类定义的几点说明1:
(1) class是定义类的关键字,类名是一种标识符,必须符合C++标识符的命名规则。{ }内是类的定义体部分,说明该类的成员,类的成员包括数据成员和成员函数。
(2) 类成员的三种访问控制权限:
类有三种访问控制权限,分别是private(私有成员)、public(公有成员)、protected(保护成员),在每一种访问控制权限下,均可以定义数据成员和成员函数。
(3) 类具有封装性。
(4) 一般情况下,类名的第一个字母大写。
(5) 由于类的公有成员提供了一个类的接口,所以一般情况下,先定义公有成员,再定义保护成员和私有成员,这样可以在阅读时首先了解这个类的接口。
(6) 数据成员可以是任何数据类型,但是不能用自动(auto)、寄存器(register)或外部(extern)进行说明。
(7) 注意在定义类时,不允许初始化数据成员。
有关类定义的几点说明2:
(8) 结构体和类的区别
C语言中的结构体只有数据成员,无函数成员。C++语言中的结构可有数据成员和函数成员。在缺省情况下,结构体中的数据成员和成员函数都是公有的,而在类中是私有的。可随意修改结构体变量中的数据,这样对数据的操作是很不安全的,不能通过结构体对数据进行保护和控制;在结构体中,数据和其相应的操作是分离的,使得程序的复杂性难以控制,而且程序的可重用性不好,严重影响了软件的生产效率。所以,一般仅在描述数据成员时使用结构,当既有数据成员又有成员函数时使用类。
(9) 注意:在类定义时不要丢掉类定义的结束标志分号。
有关类定义的几点说明3:
类定义实例
例:定义日期类
class Tdate // 定义日期类
{
public: // 定义公有成员函数
void Set(int m,int d,int y); // 置日期值
int IsLeapYear(); // 判是否闰年
void Print(); // 输出日期值
private: // 定义私有数据成员
int month;
int day;
int year;
}; // 类定义体的结束
类中成员函数的定义
类的数据成员说明对象的特征,而成员函数决定对象的操作行为。成员函数是对封装的数据进行操作的唯一途径。类的成员函数有两种定义方法:外联定义和内联定义。
1. 外联成员函数(外联函数)
外联定义成员函数是指在类定义体中声明成员函数,而在类外定义成员函数。定义时函数名之前缀上类名::,作用域区分符::指明一个成员函数或数据成员所在的类。::前若不跟类名,则成为全局数据或全局函数(非成员函数)。
在类外定义成员函数的具体形式为:
返回值类型类名::成员函数名(形式参数表)
{
// 函数体
}
void Tdate::Set(int m,int d,int y)// 置日期值
{
month=m; day=d; year=y;
}
int Tdate::IsLeapYear() // 判是否闰年
{
return (year%4==0&&year%100!=0)||(year%400==0);
}
void Tdate::Print() // 输出日期值
{
cout<<month<<"/"<<day <<"/"<<year<<endl;
}
外联函数的定义(例:)
2. 内联成员函数(内联函数、内部函数、内置函数)
内联函数是指程序在编译时将函数的代码插入在函数的每个调用处,作为函数体的内部扩展,用来避免函数调用机制所带来的开销,提高程序的执行效率。可以将那些仅由少数几条简单代码组成,却在程序中被频繁调用的函数定义为内联
类和对象(C ) 来自淘豆网m.daumloan.com转载请标明出处.