类和对象入门

一、类的引入

在我们学习C语言的时候,我们可以使用结构体将多中不同类型的变量“糅合”成一个新的变量,如定义一个学生的结构体:

struct Student
{
	char name[20];
	int age;
	int ID;
};

学习C++后,我们可以使用类来将一个对象的属性与行为“糅合”在一起,如日期类包含日期的属性(年,月,日)和其行为(打印日期)

class Date
{
private:
	int _year;
	int _month;
	int _day;
public:
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year=year;
		_month=month;
		_day=day;
	}
	void print()
	{
	cout << _year << "年" << _month << "月" << _day << "日" << endl;
	}
};

二、类的定义

类的定义与结构体基本相同,将struct换位class,同时增加了private,public,protected属性以及构造和析构函数

1.关于访问限定符private和public
类将成员变量和成员函数都封装起来,默认为private,即只能在类的作用域内访问。而将其属性设置为public则相当于给外接提供了访问类的结构,类作用域外也可以访问类public属性的成员。
通过设置private和public,使得程序的封装性得到大幅提升,只允许外接通过接口来访问内部数据,保护了类的内部数据不被胡乱修改

2.构造和析构函数
构造函数的函数名与类名相同,创建对象的时候时编译器自动调用对应的构造函数

// 1.无参构造函数
	Date()//设置默认日期
	{
		_year = 1;
		_month = 1;
		_day = 1;
	}

	// 2.带参构造函数
	Date(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}

	// 3.拷贝构造函数
	Date(Date& d)
	{
		_year = d.year;
		_month = d.month;
		_day = d.day;
	}

析构函数:
概念:与构造函数功能相反,析构函数不是完成对象的销毁
局部对象销毁工作是由编译器完成的。而对象在销毁时会自动调用析构函数,完成类的一些资源清理工作

三、类的实例化

当我们完成了类的定义时,只是得到了一份图纸,而类的实例化则需生成对象,以日期类为例:

	Date d1;					//调用无参默认构造函数
	Date d2(2021, 5, 20);		//调用有参构造函数
	Date d3(d1);				//调用拷贝构造函数

注:若日期不合法将会报错(前提是我们在构造函数的实现已考虑不合法情况)

当生成了对象才实际占用存储空间,其中函数没有存到对象中,而是存在公共代码段
一个类的大小,实际就是该类中”成员变量”之和,遵循内存对齐,此外注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类
在这里插入图片描述

四、this指针

根据对象中成员的存储,我们疑惑为什么不同对象的成员函数使用的是同一份,但是调用这份公共代码却能准确的作用于本对象中,由此我们引出this指针
1.this指针是隐含的,是编译器编译时加的,不能在函数参数处自己写出来
2.可以在函数内部使用this指针
3.this指针一般是存放在栈帧里,存储位置和编译器有关,VS编译器是存在寄存器里

this指针代码理解

Date d1(2021, 6, 28);
d1.print();			//等价于d1.print(&d1)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值