类和对象——上

本文介绍了C++中的类和对象概念,包括类的设计、对象的创建,以及访问修饰符(public,protect,private)的应用。重点讲解了this指针的作用和在函数中的隐式参数特性,以及对象大小和多个对象共享函数的区分。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这段时间了解了类和对象的一些知识,写个博客记录下,如果有什么错误的地方,望指正。


提示:以下是本篇文章正文内容,下面案例可供参考

一、类和对象是什么?

类的概念和我们生活中的设计图相似,类就是一个设计图,而对象就是我们根据类来实现的东西。

 在类中我们可以声明变量,也可以实现函数,并且可以添加访问修饰符来进行数据访问的控制。

class Date
{
private:
	int _year;
	int _mouth;
	int _day;

};

int main()
{
	Date s1;
	return	0;
}

二、类和对象的使用

1.语法结构

        

class Date        //类的定义
{
private:
	int _year;
	int _mouth;
	int _day;

};

int main()
{
	Date s1;     //对象
	return	0;
}

 类的实现方式为:class  类名{类体};                对象的实现为:类名   对象名

在类体中我们可以对数据添加访问权限修饰符,也就是public(公有),protect(保护),private(私有)。

public(公有):当前的文件中所有的函数都可以访问类体中public修饰的数据。

  

protect(保护):只能由类体或者是子类中的函数进行访问类中的protect修饰的数据,类之外的无法访问。 

private(私有):只能由类中的函数访问被private修饰的数据。

2.注意事项

在c和c++中,struct与class其实并没有多大的区别,就目前我所了解的,struct和class都是类,只是叫法不同,并且struct在使用时其内部的数据默认是public(公有),而class是private(私有),但是在c++中我们还是习惯于使用class,这样可以保证数据的安全性。

         在类中我们的函数能够直接访问类中的数据,那么他是怎么访问的呢?这里就涉及到了this指针,在c++中,类中的函数能够直接使用类的数据,就是因为this指针的存在,在函数my中,我们看到的形参只有year,但是不然,my的传入参数其实还有this,而this指向的就是这个类的对象的地址,他是一个隐式参数,平时我们并不用写出。这里的this就是指向的s1的地址。而函数my的函数体中的_year=year其实应该为this->_year=year  这里只是我们的写法而已,但是编译器和我们看到的是不一样的。

这里为了区分类中的变量和传入参数,所以在类中的变量前加了下划线。

class Date
{
private:
	int _year;
	int _mouth;
	int _day;

public:
void my(int year)
{
	_year = year;
}
};


int main()
{
	Date s1;
	s1.my(1);
	return	0;
}

         并且,我们来看下,类的大小是多少。这里我们可以看见类的大小是12,也就是前面的几个int类型数据的大小,这里又不得不提一下,虽然我们在这里是声明的变量_year,_mouth,_day但是实际上编译器已经为我们开好了空间,也就是声明了,虽然是随机值,而这几个变量的大小和就是12,那么函数my呢?为什么没有大小,因为函数不是放在对象中的,而是把函数放在了一个公共的区域内一起存储。

 这里我们来看看不同的对象同时调用同一个函数。

class Date
{
private:
	int _year;
	int _mouth;
	int _day;

public:
void my(int a)
{
	_day = a;
	cout << _year <<'/' << _mouth <<'/' << _day << endl;
}
};


int main()
{
	Date s1;
	Date s2;
	s1.my(1);
	s2.my(2);
	return	0;
}

 为什么两个不同的对象调用同一个函数的结果却不同呢?关键就在this指针这里,这里两次this指针的指向对象是不同的,第一次是s1,而第二次却是s2,由此得出,this指针是一个形参,当我们以不同的对象调用同一个函数的时候,this所指向的地址也是不同的(对象的地址)。


总结

在c++中,this指针的理解程度一定程度上影响着我们对于程序的解读速度,this指针的理解越深刻,那么你对程序的把控也就越好。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值