类与对象基本知识一
1类的定义
类是对具有相同属性和行为的一组对象的抽象,是面向对象程序设计(OOP)的核心
属性(attribute):数据(data)
行为(behavior):函数(function)、操作(operation)、方法(method)
//C++中定义类的一般格式:
class 类名
{
private: //访问权限修饰符
私有数据成员和成员函数
protected:
保护数据成员和成员函数
public:
公有数据成员和成员函数
};
2定义对象/访问成员
- 对象定义常用格式:
//类名 对象名1[,对象名2,...,对象名n];
CDate date1,date2;
- 访问对象成员的方式:
(1)对象变量名.成员date1.Date_Year=2020;
(2)对象指针->成员
//类对象公有数据成员的访问
class CDate
{
private:
int Date_Year;
int Date_Month;
int Date_Day;
public:
void setDate(int,int,int);
void Display();
int GetYear();
};
- 成员函数的实现
(1)定义在类内
(2)定义在类外
返回类型 类名::成员函数名(形式参数表)
{
//函数体
}
内联函数
-
在函数首部前增加关键字inline,该函数就被声明为内联函数。
-
当一个类的成员函数在类内实现时,则默认其为内联函数。
-
内联函数工作原理:
(1)编译器在编译时会以内联函数的代码代替函数调用。
(2)可以避免调用函数时的大量系统开销,从而加速代码的运行。
(3)特点:代码简短、功能简单,不能有循环、选择分支语句、递归语句。
访问属性
- 类的任何成员都有访问属性,默认为private.
- 一个类并非一定要拥有全部三种访问属性的成员。
this指针
C++中,每个成员函数都有一个特殊的隐含指针,称为this指针,用来存放当前主调对象的地址。
构造函数与析构函数
- 构造函数
类的一种特殊的成员函数,在定义类的对象时,系统会自动调用析构函数来创建和初始化对象。
//函数形式
类名 ([形式参数表])
{
......
}
//构造函数可以重载,有多种形式:
//1、系统默认构造函数以及无参构造函数
类名()
{}
/*注意:若用户没有定义构造函数,系统会为每个类自动提供一个不带形式参数的默认构造函数
一旦用户自己定义了构造函数,系统不再提供默认的无参数构造函数*/
//2、具有默认参数值得构造函数
//3、复制构造函数:同类对象的常引用
类名(const 类名&对象名)
{
......
}
/*注意:
若程序员没有定义复制构造函数,则系统会生成一个默认的复制构造函数
将源对象参数的所有数据成员值,逐一赋值给新建的对象*/
构造函数初始化方法
CDate::CDate(int y,int m,int d):Date_Year(y),Date_Month(m),Date_Day(d)
{
cout<<"Executing constructor..."<<endl;
}
复制构造函数在以下3种情况由系统自动调用
(1)由一个对象初始化定义另一个对象时。
(2)对象变量作为实参和形参的函数调用时。
(3)当函数返回对象变量值时。
- 析构函数
类的一种特殊的成员函数,当对象生存周期结束,系统会自动调用析构函数来释放对象所占的内存资源。
~类名()
{
//函数体
}
说明=
(1)析构函数不能重载,每个类只有一个析构函数。
(2)系统提供一个函数为空的默认析构函数。
(3)析构函数在撤消对象时自动执行,析构函数的调用顺序和构造函数的调用顺序正好相反。