C++类和对象.四个默认成员函数(赋值运算符重载)

1.(1)类的定义

  类就是具有相同数据和相同操作的一组对象的集合。

学生类定义:

class student
{
//成员变量
char* name;
int age;
int sex;

//成员函数
void speak()
{
cout< }
};

注:类的大小与普通数据成员有关,与成员函数和静态成员无关。空类大小为1.

  (2).访问限定符  

public:声明对类的外部接口,所有来自外部的访问通过接口进行。

private:只允许本类的成员函数来访问,类外部的访问都是非法的。

protected:介于公有和私有类型之间,只有本类和派生类可以访问。

   (3).面向对象封装性

  封装是指把数据和现实操作的代码集中起来放在对象内部,并尽可能的隐蔽对象的内部细节。

  封装具有两层含义:

    a.有关数据+操作代码封装在一个对象内,各个对象相互独立,互不干扰。

    b.对象中的有些数据+操作代码对外隐蔽称作信息隐蔽。

注:信息隐蔽有利于数据安全,防止无关人员访问和修改。

2.四个默认成员函数

(1)构造函数

私有成员变量要对他们进行初始化,必须用一个公有的成员函数进行,同时这个函数应该在定义对象时执行一次,这是调用的函数称为构造函数。

构造函数是特殊的成员函数   

特征:

a.函数名与类型相同

b.无返回值

c.对象构造(对象实例化)时系统自动调用对应的构造函数

d.构造函数可以重载

e.构造函数可以在类中定义,也可以在类外定义

f.如果类定义中没有给出构造函数,则C++编译器自动产生一个缺省的构造函数,只要我们自己定义了一个构造函数,系统就不会自动生成缺省的构造函数

g.无参的构造函数和全缺省的构造函数都认为是缺省构造函数,并且缺省的构造函数只能有一个

#include
using namespace std;

class Date
{
public:
	//无参构造函数
	Date()
	{}
	//带参构造函数
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	//全缺省的构造函数
	Date(int year = 2015, int month = 7, int day = 7)
	{
		_year = year;
		_month = month;
		_day = day;
	}
private:
	int _year;
	int _month;
	int _day;
};
int main()
{
	Date d1;                   //调用无参构造函数
	Date d2(2019, 4, 20);      //调用带参构造函数 
	//注意:调用无参构造函数创建对象时,对象后边不用跟括号,否则就成了函数声明
	//例如:Date d3();
	return 0;
}

 

(2)拷贝构造函数

创建对象时使用同类对象来进行初始化,这时所用的构造函数称为拷贝构造函数,拷贝构造函数是特殊的构造函数。

特征:、

a.拷贝构造函数是一个构造函数的重载

b.拷贝构造函数的参数必须使用引用传参,使用传值方式会引发无穷递归调用

c.若未显示定义,系统会默认缺省的拷贝构造函数。缺省的拷贝构造函数会依次拷贝类成员进行初始化

(3)析构函数

当一个对象的生命周期结束时,C++编译系统会自动调用一个成员函数,这个特殊的成员函数即析构函数。

特点:

a.析构函数在类名前加上字符~

b.析构函数无参数无返回值

c.一个类有且仅有一个析构函数,若未显示定义,系统会自动生成一个缺省的析构函数

d.对象生命周期结束时,C++编译系统自动调用析构函数

e.析构函数体内主要完成清理工作

(4)赋值运算符的重载

       赋值运算符的重载是一对一已存在的对象进行拷贝赋值。

注:C++不能重载的运算符:: ?: . * sizeof

3.隐含的this指针

(1)除构造函数外每个成员函数都有一个指针形参,称为this指针,this指针是隐式的。

4.运算符重载

(1)C++只能对已有的C++运算符进行重载,不允许用户自己定义新的运算符

(2)C++运算符只有少数几个不能重载:: ?: . * sizeof

(3)C++重载功能应与原来相似,不能改变运算符操作对象的个数,不能改变运算符原有的优先级.结合特性

(4)运算符重载函数的参数不能全部是C++预定义的基本数据类型

(5)运算符重载函数可以是普通函数、类的成员函数、类的友元函数。

你可能感兴趣的