| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 【C++从入门到踹门】第二篇:类和对象(上) -> 正文阅读 |
|
[C++知识库]【C++从入门到踹门】第二篇:类和对象(上) |
目录1.面向过程与面向对象
2.类的引入C语言中我们熟悉结构体
然而在C++中,结构体不仅可以定义变量,还可以定义函数
上面结构体的定义,C++中更偏向用class来代替struct关键字。 3.类的定义
类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。 类的两种定义方式:
类定义了一个新的作用域,类的所有成员都在类的作用域中。在类外定义成员,需要使用作用域符 4.类的访问限定符通过访问权限的限定,可以选择性的将函数接口提供给外部用户使用
应用:
private修饰的变量我们只能通过类内访问,类外是无法访问的! 5.类与对象5.1 类的实例化我们创建的类就如同设计一张图纸,定义一个类并不会分配实际的内存空间。 一个类好比一张“建筑设计图纸”,只是设计并没有实体的建筑存在。而经过设计图纸造出的房屋的过程我们称为实例化,一个个“房屋”我们称之为对象。 实例化出的对象才能实际存储数据,占用内存空间。 5.2.类的大小计算类中既包含成员变量,又包含成员函数,那实例化后的对象中包含了什么呢?以及如何计算一个对象的大小? 我们会将成员变量存储在对象中,因为每个对象可以具备不同的属性,例如上文中我们创建的Date类,针对对象d1,我们可以为d1设定属性(某日日期): 但是成员函数对于多个对象来说是通用的,打印日期这件事每个对象都可以去做: 试想下,如果将函数代码段也保存在每个对象中,那么相同的代码会保存多次,浪费空间。于是我们选择只保存成员变量,成员函数放在公共代码段。 我们对不同的对象分别获取大小
结论:一个类的大小就是该类中的成员变量之和,当然需要注重内存对齐。注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类。 5.3内存对齐规则
结构体大小的计算6. this指针6.1 this指针引出我们先来设定一个类:Date,来设定日期:
这里我们的初衷是想为对象d1设定具体日期并打印,现在运行下看是否能成功 这里显然没有将函数值成功赋给d1的成员变量,导致输出的仍是未初始化的随机成员变量。 问题就出在这里: 显然这里的函数是自己的形参对自己赋值了(作用域的就近原则),为了避免歧义,我们有几个办法可以防止冲突:
但是这么做的成本太高了,每个类各自为政,类名长了就比较麻烦。
这里就有一个疑问了,上文我们提到过对象的存储空间是该对象成员变量所占的存储空间,而不包括函数代码所占的存储空间。 因为针对某个类的多个对象而言,不同的只是成员变量,成员函数都是一样的代码,没有必要为每个对象都保存一份成员函数的代码。 既然多个对象是共用一个成员函数的,那么函数究竟是如何区分是哪一个对象调用的呢? 是 C++通过this指针解决了这个问题,C++编译器给每一个“非静态成员函数”添加一个隐藏的类指针参数 于是我们有了第三个方法防止形参名与成员变量名冲突的问题:
6.2 理解this指针
可以验证下this指针和对象的首地址是否一致
看下面这段代码
p为空指针, 执行1. 执行2. 由此得到 this指针可以为空,当我们调用函数时,如果函数内部不需要使用到this,也就是不需要通过this指向当前对象并对其进行操作时才可以为空,如果调用的函数需要指向当前对象,并进行操作,则会发生错误(空指针引用)就跟C中一样不能进行空指针的引用。
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 13:07:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |