C++日记3(类的声明和实现、对象的声明、构造函数、复制构造函数、析构函数)

类似于结构体,C++类是一种新的数据类型。C++类是由不同的数据类型组成的结构体,但类要比结构体增加了操作数据的函数。

注意类的声明和类的实现是两种概念。类的声明仅仅声明了类的成员(数据成员和成员函数),而如果使用成员函数,则需要对其定义具体操作,即类的实现。

类的声明格式:

  1. class是定义类的关键字,大括号中被称为类体或类空间。
  2. 类名标识符指定了类名,通过类名可以声明对象。
  3. 类的成员有函数和数据两种类型。
  4. 有关键字public、private、protected

类的成员函数在类中声明,但具体函数内容的定义可以在类中,也可以在类外,两种效果一样。

类的成员函数在类体内定义时,格式上于普通函数定义相同。

在类体外定义时,需要用到域运算符::(两个冒号)。

格式如下:

int person:: function() //int为函数返回值类型、person为类名、function为函数名
{
	/******/
	/******/
	/******/
}

如果程序采用多文件格式,类的声明一般放在“xxx.h”格式的文件中。类的实现(定义类的成员函数的代码段)一般放在“xxx.cpp”格式的文件中,主函数则放在“main.cpp”中。

关于类的实现的说明:

  1. 类的数据成员不可以在类的声明中初始化。
  2. 空类是C++最简单的类,只是起到占位作用。

定义好新类后,可以通过类名来声明一个对象(类似于结构体变量的声明)。

声明完对象后就是对象的引用了,一种是成员引用方式,另一种是对象指针方式。(仍然类似于结构体)

注意,如果使用对象指针方式,则需要用到“->”运算符。

前面讲到,类中数据成员的初始化不能直接在类的声明过程中赋值并且类也不能像结构体那样初始化,如果需要初始化,就需要构造函数来完成。

构造函数有以下几个特点:

  1. 要在public下声明,但可以在类体外定义,如果在类体外定义,则需要用到上面讲的域运算符。
  2. 没有函数返回值类型。
  3. 函数名与类名相同。
  4. 可以拥有参数,也可以没有,并且可以通过参数来给类进行初始化。

开发程序时可能需要保存对象的副本,以便在以后恢复对象的状态,这就可以使用赋值构造函数来实现。复制构造函数声明的位置一般在构造函数之下。

/*代码节选自《C++从入门到精通(第二版)》*/
#include<iostream>
using namespace std;

class CPerson
{
	public:
		 CPerson(int iIndex,short shAge,double dSalary);//构造函数 
		 CPerson(CPerson & copyPerson);//复制构造函数 
		 int m_iIndex;//数据成员 
		 short m_shAge;//数据成员 
		 double m_dSalary;//数据成员 
};

CPerson::CPerson(int iIndex,short shAge,double dSalary)//构造函数 
{
	m_iIndex=iIndex;
	m_shAge=shAge;
	m_dSalary=dSalary;
}

CPerson::CPerson(CPerson & copyPerson)//复制构造函数 
{
	m_iIndex=copyPerson.m_iIndex;
	m_shAge=copyPerson.shAge;
	m_dSalary=copyPerson.dSalary;
}

int main()
{
	CPerson p1(20,30,100);//声明对象p1并对其初始化,此处调用构造函数。 
	CPerson p2(p1);//声明对象p2并复制p1内容,此处调用复制构造函数。 
	return 0;
}

析构函数用来释放一个对象占用的空间其函数名与类名相同,但要在前面加~,与构造函数功能正好相反。

发布了277 篇原创文章 · 获赞 222 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/cax1165/article/details/100610007