| |
|
开发:
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++初阶】二、类与对象(上篇)| 面向过程和面向对象初步认识| 类的引入和定义| 类的作用域| 类的实例化| 类对象模型| this 指针| C++的代码风格 -> 正文阅读 |
|
[C++知识库]【C++初阶】二、类与对象(上篇)| 面向过程和面向对象初步认识| 类的引入和定义| 类的作用域| 类的实例化| 类对象模型| this 指针| C++的代码风格 |
目录 一、面向过程和面向对象初步认识
比如:洗衣服这件事?,面向过程是这样的,注重的是过程 ?面向对象是这样的,注重的是对象 ?-------------------我是分割线------------------ 二、类的引入????????C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如:之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现,会发现struct中也可以定义函数。 比如,在C++中使用结构体(C++兼容C语言)
在C++中,struct 中可以定义函数
?上面结构体的定义,在C++中更喜欢用类(class)来代替 struct。 ??-------------------我是分割线------------------ 三、类的定义
?类的两种定义方式: (1)声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理(函数代码量少,只有几行的情况)
(2)类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加 类名::
一般情况下,采用第二种方式:
??-------------------我是分割线------------------ 四、类的访问限定符及封装4.1?访问限定符
? ?【访问限定符说明】
注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别 在这里 privata 和 protected ?没有啥区别,学到继承的时候才有区别 代码示例:
??-------------------我是分割线------------------ 面试题问题:C++中struct和class的区别是什么?
??-------------------我是分割线------------------? 4.2?封装
在类和对象阶段,主要是研究类的封装特性,那什么是封装呢?
?封装本质上是一种管理,让用户更方便使用类。 比如:对于电脑这样一个复杂的设备,提供给用户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件 ? ?对于计算机使用者而言,不用关心内部核心部件,比如主板上线路是如何布局的,CPU内部是如何设计的等,用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此计算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可,同理封装也是如此
五、类的作用域类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域
六、类的实例化用类类型创建对象的过程,称为类的实例化 (2)一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量 (3)做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象才能实际存储数据,占用物理空间 ?例如: 七、类对象模型7.1?计算类对象的大小类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?如何计算一个类的大小?
解释请看下面? 7.2 类对象的存储方式猜测(1)第一种:对象中包含类的各个成员
(2)第二种:代码只保存一份,在对象中保存存放代码的地址 这种也可行,但不是最优的,在后期学习C++中也会用到这种存储方式 (3)第三种:只保存成员变量,成员函数存放在公共的代码段 ?类的存储选择用这种方式 通过下面的例子验证上面的猜想:
?运行结果:
结构体内存对齐规则
【面试题】 这些在C语言已经解释过了,自己翻阅即可。 ???-------------------我是分割线------------------?? 八、this 指针8.1 this指针的引出我们先来定义一个日期类 Date
运行结果: ?对于上述类,有这样的一个问题: Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调用 Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?
?比如,把 this 指针补充完善如下: ?但实际代码不能补上,补上就会报错(上面补充方便理解),因为 this 指针对所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。 ?虽然实参和形参位置不能显示接受 this 指针(也就是上面写出来),但可以在成员函数内部使用 this 指针,如 8.2?this 指针的特性
??-------------------我是分割线------------------?? 【面试题】
2. this指针可以为空吗? (1)下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
答案是C,正常运行 解释:
(2)下面程序编译运行结果是? A、编译报错 B、运行崩溃 C、正常运行
?答案是B,运行崩溃 ?解释:
九、关于C++的代码风格我们经常会在 C++ 代码里看到变量前加一个杠 _ 或者在变量后加一个杠 _,这其实是 C++ 的规范用法, 这里的价值在如上代码就体现了,如果不加杠,在初始化时就懵了 (year = year),加杠就代表它是成员变量,易于理解 如果不加就是这种情况了,别人刚看到就晕菜了,这里的year、month、day到底是成员变量,还是函数形参?实属不易于理解 ?在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图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 | -2025/3/4 11:12:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |