C++类和对象--四个默认函数+运算符重载

C++类的基本点

(1)类的定义

  在C++中,用“类”描述“对象”。对象是构成系统的基本单位,可以是自然物体,也可以是一种逻辑结构等。

  类是所有面向对象的语言的共同特征,类是对象的抽象,而对象是类的具体实例。可以说类是对象的模板,用来定义对象的抽象类型。

(2)成员访问限定符

  public(公有的):既可以被本类中的成员函数引用,也可以被类的作用域的其他函数所用。

  private(私有的):只能被本类中的成员函数所引用,类外不能调用。

  protected(受保护的):不能被类外访问,可被派生类的成员函数访问。

(3)类的三大特性:继承、封装、多态

  现在声明一个类:

class student//类名
{public://访问限定符
	void show()//成员函数
	{
		cout << _name << endl;
		cout << _age << endl;
		cout << _sex << endl;
	}
public:
	//成员变量
	char *_name;
	int _age;
	char *_sex;
};
int main()
{
	//实例化
	student s1;
	s1._name = "小张";
	s1._age = 18;
	s1._sex = "男";
	s1.show();
	student s2;
	s2._name = "小李";
	s2._age = 18;
	s2._sex = "女";
	s2.show();
	system("pause");
	return 0;
}

 

类的四个默认成员函数

 

(1)构造函数

  私有成员变量要进行初始化,必须用一个公有的函数进行,同时这个函数应该在定义对象时自动执行一次,此时调用的函数称为构造函数。构造函数是一种特殊的成员函数,需要注意的是:

  a、与其他函数不同,不需要用户调用构造函数,它在建立对象时自动生成。

  b、构造函数的名字必须与类名相同,不能任意命名。

  c、构造函数不具备任何类型,不返回任何值,它的作用只是对对象进行初始化。

  d、构造函数可重载。

  e、若用户没有定义构造函数,则系统会自动生成一个函数体是空的构造函数,没有参数,不执行初始化操作。

(2)拷贝构造函数

  通过一个存在的对象初始化一个新建的对象,是使用同类对象进行初始化。与构造函数在创建对象直接进行初始化有差别。

  拷贝构造函数的特点是:它其实是一个函数的重载;参数必须使用引用传参,使用传值方式会引发无穷递归调用;若为自定义,系统会默认缺省的拷贝构造函数。

  下面是一个包含构造函数与拷贝构造的函数的程序:

 

class date
{
public:
	date()//无参构造函数
	{
		_year = 1995;
		_month = 10;
		_day = 9;
	}
	date(int year,int month,int day)//带参构造函数
	{
		_year = year;
		_month = month;
		_day = day;
	}
	date(const date&d)//拷贝构造函数
	{
		_year = d._year;
		_month = d._month;
		_day = d._day;
	}
	void display()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	date d1;//调用无参函数
	d1.display();
	date d2(2017, 10, 9);//调用带参函数
	d2.display();
	date d3(d1);//调用拷贝构造函数
	d3.display();
	date d4 = d2;//调用拷贝构造函数
	d4.display();
	system("pause");
	return 0;
}

 

(3)析构函数

  当对象的生命期结束时,会自动执行析构函数。析构函数是与构造函数作用相反的函数,它的名字是类名的前面加一个“~”符号。  析构函数的特点是:

    a、析构函数不返回任何值,没有函数类型,也没有函数参数。

    b、析构函数没有函数参数,所以不能被重载。一个类只能有一个析构函数。

    c、析构函数的作用并不是删除对象,而是在撤销对象占有内存前进行清理工作。

  下面是一个包含析构函数的程序:

class date()
{
public:
	~date()//析构函数
	{

	}
private:
	int _year;
	int _month;
	int _day;
}


(4)赋值操作符重载

  它是两个已有对象一个给另一个赋值的过程,不同于拷贝函数。

  拷贝函数是用已有对象给新生对象赋初值的过程,赋值运算符的重载是对一个已存在的对象进行拷贝赋值。

 

运算符重载

 

  (1)目的:增强程序的可读性,C++支持运算符重载

  (2)运算符重载的特征:重载<运算符的函数名:operator<;运算符重载后,不能改变运算符的优先级/结合行/操作数个数;5个不能C++重载的运算符:./::/sizeof/?:/.*

隐含this 指针

  (1)每个成员函数都有一个指针形参,名字固定,称为隐含this指针。
  (2)编译器会对成员函数进行处理,在对象调用成员函数时,对象地址作实参传递给成员函数的第一个形参this指针。
  (3)this 指针是成员函数隐含指针形参,是编译器自己处理的,不能在成员函数的形参中添加this指针的参数定义,也不能调用时显示传递对象的地址给this指针。
  下为编译器处理隐含this指针:

 

 
 
 
 
 

版权声明:本文为qq_39290490原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。