C++ 类与对象(类的定义)

目录

1.面向过程与面向对象初步认识

 2.类的引入

4.类的访问限定及封装

 5.类的作用域​编辑

6.类的实例化

 7.类对象模型

8.this指针 

C++的封装性


1.面向过程与面向对象初步认识

C:面向过程

C++:面向对象

C++ 类与对象(类的定义)_第1张图片


 2.类的引入

C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。

比如: 之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;

现在以C++方式实现,会发现struct中也可以定义函数。

C++ 类与对象(类的定义)_第2张图片

 C++可以用struct定义类,但更常用的是class

C++ 类与对象(类的定义)_第3张图片

4.类的访问限定及封装

C++ 类与对象(类的定义)_第4张图片

 C++ 类与对象(类的定义)_第5张图片

成员变量前面一般会+‘-’

例:

C++ 类与对象(类的定义)_第6张图片


 


 5.类的作用域C++ 类与对象(类的定义)_第7张图片


6.类的实例化

C++ 类与对象(类的定义)_第8张图片

例:

C++ 类与对象(类的定义)_第9张图片


 7.类对象模型

C++ 类与对象(类的定义)_第10张图片

C++ 类与对象(类的定义)_第11张图片

 所以计算类的大小只是计算类对象的大小,并不包括类的函数的大小

C++ 类与对象(类的定义)_第12张图片

在调用函数是,是在公共区域找,而不是在类对象中找

例:

C++ 类与对象(类的定义)_第13张图片 

给一个byte的大小,表面被实例化定义过。 

补充:

C++ 类与对象(类的定义)_第14张图片


8.this指针 

 关键字:this

编译器完成的操作如下:(紫色的部分)

C++ 类与对象(类的定义)_第15张图片

 (但是不能自己加哦)

但是可以自己显式地打印this

C++ 类与对象(类的定义)_第16张图片

C++ 类与对象(类的定义)_第17张图片

C++ 类与对象(类的定义)_第18张图片

C++ 类与对象(类的定义)_第19张图片

几个小问题(面试题)

1.this指针存在在哪里

栈上(因为它是隐含形参)

vs下面是通过ecx寄存器

2.空指针问题

C++ 类与对象(类的定义)_第20张图片

 第二个运行崩溃是由于进行了解引用操作

 那下面这个呢?

为什么呢?

func并不在对象里面,那就在公共代码区去走,ptr真正的意义是传递给this

C++ 类与对象(类的定义)_第21张图片

 有没有解引用的行为取决于右面的东西在不在对象里面,而不是用没用那个符号(->或者*符号等)


C++的封装性

对比C语言:

C++:

C++ 类与对象(类的定义)_第22张图片

C语言:

C++ 类与对象(类的定义)_第23张图片

你可能感兴趣的:(C++,c++,开发语言)