c++类和对象(上)

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


前言

提示:这里可以添加本文要记录的大概内容:

用最好的武器,打最强的怪:)

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

一、从面向过程到面向对象

c语言时面向过程的,一步步分析,建立对应函数解决相关问题。
而c++时面向对象的,将一件事拆成不同对象,根据对象的交互来解决问题。
就比如洗衣服时,我们只需要关注,衣服,洗衣机,洗衣液,人之间是如何交互完成洗衣服这一项工作,而不需要去关注洗衣机如何工作这一类问题。

二、类的引入

类的本质就是一个包装。在c语言中,我们用结构体来包装链表内的元素,在c++中,不仅可以包装变量,还可以把函数攘括在内

class func
{
	int _a;
	int _b;

	int Init()
	{
		_a = 1;
		_b = 2;
	}

};

如代码所见,在c++中我们更喜欢用class来代替struct。

三、类的定义

class className
{
// 类体:由成员函数和成员变量组成
};  // 一定要注意后面的分号

类体内,成员变量也叫作属性,成员函数也叫作方法。

类的两种定义方式
1、声明和定义全部放在类体内,这种情况编译器可能会将成员函数当成内联函数。
2、声明放在类体内,成员函数定义放在.cpp中。
在这里插入图片描述
注:成员函数定义时呀加上类的命名空间的修饰

四、类的访问限定符

类的访问限定符有三种public,private,protected.根据字面意思就可以知道这些符的限定范围了,下面讲一些使用规范
1、类中定义的限定符的作用域是从这个限定符出现,直到类定义结束,或者到下一个限定符出现。
2、class的默认访问权限是private,struct默认访问权限是public。

五、类的封装

c++中,通过类将数据以及操作数据的方法进行有机结合,通过访问权限来
隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用。

举一个例子,在栈里面,我们会用到取栈顶元素,在c中可以直接取st[top],但不同的算法中top的值会不同,导致了对象使用不规范,但在封装后,无法直接使用st[top]来取元素。只能通过我的开放函数Top(&st)来取。

六、类的实例化

用类来创建对象,就叫做类的实例化
我们定义一个类后,知识相当于思考出了一个模型,并没有实际的内存空间来存储它,就像建房子的图纸一样,只有用图纸实例化出对象后,才有了真正的内存空间
在这里插入图片描述

七、类的对象模型

计算类的大小

一个类可以定义多个不同的对象,但这些对象在使用类中函数时,函数是相同的,那么如果把每一个对象中都存一个这样的函数,就太浪费空间了。

有大佬提出解决方案,对象中只存放变量的内存,函数放在公共代码区,在使用的时候取访问

所以一个类的大小,其实就是其内成员变量的大小(注意内存对齐),在空类中,编译器会给一个字节的空间来标识这个类是存在的

八、this指针

1、this指针的指出

#include<iostream>

using namespace std;

class Date
{
public:
	void Init(int year, int month, int day)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	void Print()
	{
		cout << _year << "-" << _month << "-" << _day << endl;
	}
private:
	int _year; // 年
	int _month;// 月
	int _day; // 日
};
int main()
{
	Date d1, d2;
	d1.Init(2022, 1, 11);
	d2.Init(2022, 1, 12);
	d1.Print();
	d2.Print();
	return 0;
}

定义了两个对象d1,d2,在调用初始化函数时,明明调用的是同一个函数,为何会初始化不同的结果呢?C++利用了this指针解决了这个问题,C++编译器给每一个“非静态的成员函数”都增加了一个隐藏的指针参数,在函数体内对成员函数的操作,都是通过该指针去完成的。
在这里插入图片描述
注:this指针是形参,存放在栈帧里且this指针可以为空
在这里插入图片描述

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值