| |
|
开发:
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? C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。? 2? ?C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成 类的定义:?class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号。 类中的元素称为类的成员:类中的数据称为类的属性或者成员变量; 类中的函数称为类的方法或者成员函数。 类的两种定义方式:1.声明和定义全部放在类体中,需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处 理。2.声明放在.h文件中,类的定义放在.cpp文件中 访问限定符:C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其 接口提供给外部的用户使用。 1. public修饰的成员在类外可以直接被访问 2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的) 3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止 4. class的默认访问权限为private,struct为public(因为struct要兼容C
封装:?将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互。
类对象的存储方式::? 只保存成员变量,成员函数存放在公共代码段, 一个类的大小,就是成员变量大小的之和,但是我们也要进行内存对齐 注意 在struct 那里sizeof一个空的结构体是1,为啥是1个字节呢,因为这里存放了它的地址,同样,空类呢 也是一个字节。 11. 结构体怎么对齐? 为什么要进行内存对齐 若无内存对齐情况下,按照连续存储时,1234 5678作为8字节,在结构体中,char c会存储在1号位上,而int i会存储在2345位上,而CPU在读取在访问c的时候,每次访问4个字节,没有什么问题,会先拿出1---4,再拿出5---8,但是int i被切割开了,仍需要做字节切割及字节拼接,效率很低。而进行内存对齐时,将char c存放在1号位,再偏移3个字节,将int i存储在5--8号位,这样CPU进行访问的时候,不必做字节上的拼接和切割,效率会大大提高。是一种典型的空间换时间以提高效率的方式。 2. 如何让结构体按照指定的对齐参数进行对齐
3. 什么是大小端?如何测试某台机器是大端还是小端,有没有遇到过要考虑大小端的场景 数据的地位放在内存的低地址处就是小端存储 而数据的高位放在内存的高地址处就是大端存储。 this指针 存放:: this指针存放在栈上 且这个指针可以是空指针 但是要求this指针在成员函数中是没有解引用的操作 如果你解引用了 你的这个指针就不可以是空了。 this指针的特性:: 类型:: 类的类型*const 只能在成员函数的内部使用, 当对象调用成员函数的时候,将对象的地址作为实参传递给this的形参,对象中是不存储this指针的。 构造函数: 2. 无返回值。 3. 对象实例化时编译器自动调用对应的构造函数。 4. 构造函数可以重载。 同时要明确构造函数的作用:务并不是开空间创建对象,而是初始化对象 ? ? 析构函数: ?析构函数的特征如下:1. 析构函数名是在类名前加上字符 ~。 2. 无参数无返回值。 3. 一个类有且只有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。(析构函数是没有函数重载的) 4. 对象生命周期结束时,C++编译系统系统自动调用析构函数 拷贝构造函数 ?可以简单理解为 你先在有一个class类 你用这个类创建了一个对象。 创建完成后,你又创建了对象,当你想用第一个对象初始化第二个对象的时候 就用到了拷贝构造函数, 运算符重载: ?形式上是 : ?类名 operator 加重载的运算符 (参数列表) 很简单 比如定了一个类的两个对象 d1 d2 ?你想d1+d2可以直接加吗? 是不可以的 你需要先进行运算符的重载。 构造函数的初始化列表操作:: 初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括 号中的初始值或表达式。 每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次) 2. 类中包含以下成员,必须放在初始化列表位置进行初始化: 1 引用成员变量 2 const成员变量 3 自定义类型成员(该类没有默认构造函数) 4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关 explicit关键字::用explicit修饰构造函数,将会禁止单参构造函数的隐式转换。 static ::声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的 成员函数,称之为静态成员函数。静态的成员变量一定要在类外进行初始化 特性::1. 静态成员为所有类对象所共享,不属于某个具体的实例 2. 静态成员变量必须在类外定义,定义时不添加static关键字 3. 类静态成员即可用类名::静态成员或者对象.静态成员来访问 4. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员 5. 静态成员和类的普通成员一样,也有public、protected、private3种访问级别,也可以具有返回值 |
|
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 12:34:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |