
C++
文章平均质量分 57
无.处安放的灵魂
低调低调...观望期他大佬。
展开
-
使用指针进行字符串赋值的小细节
String::String(const char *s){ int len; char s_temp; length = strlen(s); pBuf = new char[length+1]; //pBuf是String类中的 char* 变量 while(*s != '\0') { *pBuf++ = *s++; } *pBuf = '\0'; cout << "initializing pBuff: " << pBuf << end原创 2021-03-14 13:08:45 · 454 阅读 · 0 评论 -
C++ 类的继承
一、为什么C++需要用到“继承”实不相瞒,我身边有位同学,他姓张,姑且叫他张同学。有一天,张同学哭着跟我说,“我好惨啊,你说上天怎么对我这么不公平,我长着一副英俊潇洒的脸,明明可以考实力闯出一番事业的,偏偏整天被家里逼迫,要我去继承十几亿身家,呜呜呜……”。虽然我想揍他,但想了想,他还是个小孩,需要他人的关爱。算了,今晚就奉献一点爱给他。他继承了继承了十几亿能去干嘛?他可以买十年真题,他可以买遥控车,他可以买棒棒糖,他可以把十几亿转账给我…说到底,就是使用他老爸的钱来完成某一样事情…那C++的继原创 2021-02-26 16:52:01 · 682 阅读 · 0 评论 -
C++常函数
一、什么是常函数?常函数,就是对类中任何成员不作修改而只能作访问的函数。二、为什么存在常函数?在一个大型的C++项目中,通常需要多人负责,我们可以简单地分成两类人,一类人负责class的设计,另一类人负责使用设计好的class。他们在协作中,难免会出现一些错误。比如,使用者通过调用类的方法,只是想查看类的属性,但被调用的方法内部可能存在修改属性的语句,即使所修改的成员并非使用者所查看的对象,但这并不是使用者的意图。所以,C++添加了常函数,增加一个条件来确保所调用的函数不会修改类的成员。三、实验原创 2021-02-10 19:41:44 · 5736 阅读 · 0 评论 -
C++ 浅拷贝与深拷贝
一、浅拷贝和深拷贝是什么?什么是浅拷贝?只有普通变量初始化的拷贝构造函数就浅拷贝。咋算普通变量?如int,char, string…不涉及指针变量。可以直接使用默认拷贝构造函数。什么是深拷贝?不用默认拷贝构造函数,自己显式定义一个拷贝构造函数,并且在其内部再次分配动态内存,这就是深拷贝。总的来说,就是类中涉及到指针变量,需要在拷贝构造函数内部申请一边。二、实验...原创 2021-02-07 01:00:38 · 406 阅读 · 0 评论 -
C++ 拷贝构造函数
一、什么拷贝构造函数?拷贝构造函数就是一个函数。这个函数是负责拷贝其它类中的变量。在无显式定义拷贝构造函数的情况,编译器会定义默认拷贝构造函数。二、实验1、实现类的拷贝(copy)//video.hpp#ifndef __VIDEO_H_#define __VIDEO_H_#include <string>using namespace std;class video{public: string film_name; int during_time; int原创 2021-02-07 00:30:31 · 208 阅读 · 0 评论 -
C++ class中使用动态内存变量
一、什么情况下class需要使用动态内存变量?需要用到大块内存的时候。比如,动态加载一个视频,一幅图片等等。我们无法事先预知视频或图片的大小。实现静态定义它的大小,有可能会出现空间不足或浪费的情况,所以这时候可以使用动态的方式申请内存。二、实验实验一:在class中定义指针,并且分配内存//video.hpp#ifndef __VIDEO_H_#define __VIDEO_H_class video{public: int *pSpace; video(int size);原创 2021-02-04 00:13:11 · 410 阅读 · 0 评论 -
C++析构函数
一、什么析构函数析构函数就是对象被释放的时候被调用的函数。它的本质是回调函数。什么时候对象会被释放?比如,main执行完退出的时候,delete一个对象指针的时候…析构函数的特点是,不带返回值,也不带参数。二、实验实验一:析构函数的定义方法//cat.hppclass cat{public: string name; int age; bool male; cat(){this->name = "wawa";}; cat(string name, int age, bo原创 2021-02-03 07:42:24 · 4164 阅读 · 0 评论 -
C++的构造函数
一、什么是构造函数构造函数就是用来构造对象的函数。它的本质就是一个回调函数。什么时候被回调?当你创建一个对象的时候,用来初始化class的属性,分配class内部需要的动态内存。构造函数的特点是,可以带参数,但不带返回值。二、实验实验一:显式默认构造函数当你定义的class中没有构造函数的时候,编译器会默认实现一个构造函数,这个构造函数是空白的,我们可以将显式编译器默认构造函数。#ifndef __ANIMAL_CAT_#define __ANIMAL_CAT_#include <原创 2021-02-03 07:18:45 · 290 阅读 · 0 评论 -
C++ 面向对象编程文件结构
一、文件结构的安排一般一个cpp和一个hpp文件配对,class名字和文件名相同。二、实验任务:描述一只猫一天的生活,属性包含姓名、年龄、性别。方法包含起床、吃饭、睡觉、玩耍(公的玩小球,母的玩娃娃)。首先,先新建三个文件。//cat.hpp#ifndef __ANIMAL_CAT_#define __ANIMAL_CAT_#include <iostream>#include <string>using namespace std;class cat原创 2021-02-03 06:49:06 · 287 阅读 · 0 评论 -
C++ alignof和alignas
一、什么是alignof和alignasalignas用来指定对象的对齐字节数。效果和__attribute__((aligned(n)))一样alignof用来查看对象的对齐字节数。用法类似于sizeof二、实验使用alignas修改结构体的对齐字节数,然后用alignof查看是否设置成功。同时,与__attribute__((aligned(n))) 进行对比。#include <iostream>using namespace std;struct alignas(1)原创 2021-01-18 13:03:26 · 1839 阅读 · 0 评论 -
C++11中的nullptr
一、什么是nullptr?nullptr是c++11的空指针,可以理解为 NULL的升级版。二、解决什么问题?首先,在C语言中,NULL是被定义成这样的#define NULL ((void *)0)。而C++中,NULL是被定义成这样#define NULL 0。那好,我手动强制转换 ((void *)0)不就行了吗?很可惜,失败了。因为C++是强类型语言,即类型要一一对应,不允许void *隐式转为int *等类型。不能强制转换就算了,那我继续沿用NULL吧。再看一下可能产生什么问题原创 2021-01-17 18:29:00 · 2625 阅读 · 2 评论 -
C++ enum枚举的使用
一、enum在C++11的变化从C++11开始,支持下面的enum形式enum struct|class 名字 : 类型 { 枚举项 = 常量表达式 , 枚举项 = 常量表达式 , ... } enum class pet: unsigned int{ Dog, Cat, Monkey, Lion};enum struct|class 名字 { 枚举项 = 常量表达式 , 枚举项 = 常量表达式 , ... }enum class pet { Dog, Cat, Monkey, Lion};原创 2021-01-16 13:05:54 · 871 阅读 · 0 评论 -
C++中引用的本质
一、引用的本质我不会告诉你,引用是“别名”,这更加令人难以琢磨…引用的本质就是带有const的指针引用的本质就是带有const的指针引用的本质就是带有const的指针int & a = b <---> int *const a = &bchar & a = b <---> char *const a = &bdouble & a = b <---> double *const a = &b(结构体类型)原创 2021-01-16 08:29:37 · 1939 阅读 · 0 评论 -
C与C++混合编程
一、C与C++混合编程的原理首先,我先了解一下编译的过程。分为四步:预处理(预处理用于将所有的#include头文件以及宏定义替换成其真正的内容)——编译(将经过预处理之后的程序转换成特定汇编代码(assembly code)的过程)——汇编(汇编过程将上一步的汇编代码转换成机器码)——链接(链接过程将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件).可以看下原文,大致了解一下:https://www.cnblogs.com/carpenterlee/p/5994681.html在原创 2021-01-13 23:07:43 · 5640 阅读 · 1 评论 -
string初步使用
1.string是什么?2.实验#include <iostream>#include <string>using namespace std;int main(){ string str1 = "hello world"; string str2 = " smart"; char str3[50] = {0}; char *str4; cout << str1 <<endl;原创 2021-01-06 19:15:58 · 165 阅读 · 0 评论 -
fstream读写文件
1.fstream是什么?fstream是C++标准库中面向对象库的一个,用于操作流式文件。fstream本质上是一个class,提供file操作的各种方法。2.关系图basic_fstream是一个类模板,暂且不用深入理解它。我们关心的事,它前面继承的那一堆东西。fstream是basic_fstream<char>的一个模板类,也就说明,fstream也继承了一堆东西。我们再关心一下从 ios_base基类,重点继承了什么?文件流的打开模式。3.实验3.1 打开/创建文件原创 2021-01-05 11:01:47 · 4626 阅读 · 0 评论 -
cin的使用
1.什么是cincin是将标准输入流写入缓冲区,即从键盘输入。2.cin涉及到的头文件: 将标准的输入输出封装到std命名空间里。3.实验3.1 读取一段字符串#include <iostream>using namespace std;int main() { char val[100]; cin >> val ; cout << val << endl; return 0;}输入:hello world输出:h原创 2021-01-04 14:20:21 · 6329 阅读 · 2 评论 -
cout的使用
1.cout是什么?cout是标准输出,对应stdout。2.cout涉及到的头文件<iostream>: 将标准的输入输出封装到std命名空间里。<iomanip>:定义了标准输入输出的控制方法,如控制精度等操作<bits/ios_base.h>:定义标准输入输出的格式状态,如将标准输出格式化为 十六进制,对应的cout对象某个状态位被设置。3.<< 符号"<<" 是流操作符号,已经被重载。没有左移的效果。4. 实原创 2021-01-04 10:55:56 · 11962 阅读 · 0 评论 -
C++系列: 标准库的初步介绍
目录1.C语言和C++的关系2. C++对C库的兼容性3. C++库的简单介绍4.最后1.C语言和C++的关系C++是C语言的一个超集,也就是说C语言有的,C++都有,而C++有的,C语言未必就有。同时,g++能编译C++文件,同样也能编译C语言文件。C程序可以通过 __cplusplus来判断编译器是gcc还是g++,__cplusplus的值是long int类型,记录C++编译器的版本号。情况一:使用gcc编译C程序#include <stdio.h&g原创 2021-01-03 09:34:29 · 571 阅读 · 0 评论 -
C++系列: 嵌套命名空间
目录1.什么是嵌套命名空间?2.实验2.1 外部引用嵌套命名空间内的符号2.2 命名空间内容不同层次间符号的引用3.最后1.什么是嵌套命名空间?嵌套命名空间就是在命名空间里面在定义其它的命名空间,就像是俄罗斯套娃。namespace np1{ namespace np2 { namespace np3 { } } ...}2.实验2.1 外部引用嵌套命名空间内的符号情况一.原创 2021-01-03 08:39:52 · 4339 阅读 · 1 评论 -
c++系列:匿名命名空间
文章目录1.什么是匿名命名空间?2.匿名命名空间有什么用处?3.实验3.1在匿名空间中引用其它命名空间3.2匿名命名空间中引用自己命名空间中的方法3.3其他命名空间中引用匿名命名空间中的方法3.4不同文件调用匿名命名空间4.最后1.什么是匿名命名空间?匿名命名空间就是一个没有名字的命名空间。namespace { func() { ... }}2.匿名命名空间有什么用处?匿名命名空间里的内容只能被本文件调用,不能被外部引用;匿名命名空间中的变量特点跟全局变量一样,而函数特点像是原创 2021-01-02 08:14:00 · 8674 阅读 · 1 评论 -
c++系列:namespace(二)
探讨默认命名空间不理解这些概念也不会影响你的编写代码,但是这些概念可能会出现在试卷上、面试上…1. 什么是默认命名空间?不包含namespace的都是默认命名空间,比如 main函数,就是定义在默认命名空间。2.全局命名空间全局命名空间 就是 默认命名空间。3.默认命名空间引用其他命名空间方法就是在main函数里面,调用namespace里面的内容int main(){ np1::func1(); return 0;}4.默认命名空间引用自己的方法这不就是C语言的常规操作嘛…原创 2021-01-01 11:29:38 · 234 阅读 · 0 评论 -
c++系列: namespace(一)
1、为什么需要namespace?namespace解决的全局变量和函数命名冲突的问题,namespace功能就像身份证一样,即使全国有100个人跟你同名,但是你的身份证号是唯一的,身份证记录你的出身省份、出身日期等等信息。2、c++和c解决命名冲突的方式有何不同?c++是namespace命名空间,说白了,先定义一个篮子,篮子里面放东西,这得要求每个篮子都是唯一的,而篮子之间里面的东西可以相同。c语言没有关键字能解决这个问题。所以,一个c语言的项目,尽可能一个人写;定义的全局变量,前面加上前缀;不原创 2021-01-01 11:04:41 · 370 阅读 · 1 评论