![](https://img-blog.csdnimg.cn/8c235e7e37d64e22acfc644cbe406d5d.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++教程
文章平均质量分 64
我在这里推荐 “窝“ 的HTML专栏
优惠券已抵扣
余额抵扣
还需支付
¥19.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
广东神
分享一些东西
展开
-
C++对象的内存模型
Student 类包含三个成员变量,它们的类型分别是 char *、int、float,都占用 4 个字节的内存,加起来共占用 12 个字节的内存。但是不同对象的成员函数的代码是一样的,上面的内存模型保存了 10 分相同的代码片段,浪费了不少空间,可以将这些代码片段压缩成一份。从运行结果可以看出,在计算类这种类型的大小时,只计算了成员变量的大小,并没有把成员函数也包含在内。事实上编译器也是这样做的,编译器会将成员变量和成员函数分开存储:分别为每个对象的成员变量分配内存,但是所有对象都共享同一段函数代码。原创 2023-03-12 08:41:29 · 209 阅读 · 0 评论 -
C++类成员的访问权限以及类的封装
前面我们在定义类时多次使用到了 public 关键字,表示类的成员具有“公开”的访问权限,这节我们就来详细讲解。C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。所谓访问权限,就是你能不能使用该类中的成员。Java、C# 程序员注意,C++ 中的 public、private、protected只能修饰类的成员,不能修饰类,C++中的类没有共有私有之分。原创 2023-03-12 08:32:33 · 195 阅读 · 0 评论 -
C++类的成员变量和成员函数详解
在类体中和类体外定义成员函数是有区别的:在类体中定义的成员函数会自动成为内联函数,在类体外定义的不会。当然,在类体内部定义的函数也可以加 inline 关键字,但这是多余的,因为类体内部定义的函数默认就是内联函数。内联函数一般不是我们所期望的,它会将函数调用处用函数体替代,所以我建议在类体内部对成员函数作声明,而在类体外部进行定义,这是一种良好的编程习惯,实际开发中大家也是这样做的。当然,如果你的函数比较短小,希望定义为内联函数,那也没有什么不妥的。原创 2023-03-12 08:10:33 · 381 阅读 · 0 评论 -
C++类的定义和对象的创建详解
类是用户自定义的类型,如果程序中要用到类,必须提前说明,或者使用已存在的类(别人写好的类、标准库中的类等),C++语法本身并不提供现成的类的名称、结构和内容。public://成员变量char *name;int age;//成员函数cout原创 2023-03-12 08:05:34 · 211 阅读 · 0 评论 -
如何实现C++和C的混合编程?
要知道,在 C++ 出现之前,很多实用的功能都是用 C 语言开发的,很多底层的库也是用 C 语言编写的。extern "C" 既可以修饰一句 C++ 代码,也可以修饰一段 C++ 代码,它的功能是让编译器以处理 C 语言代码的方式来处理修饰的 C++ 代码。在此项目中,主程序是用 C++ 编写的,而 display() 函数的定义是用 C 语言编写的。幸运的是,C++ 给出了相应的解决方案,即借助 extern "C",就可以轻松解决 C++ 和 C 在处理代码方式上的差异性。原创 2023-03-05 10:28:45 · 1991 阅读 · 1 评论 -
C和C++到底有什么关系
但是一直也没有诞生出新的C++编译器,而是对原来C编译器不断扩展,让它支持C++的新特性,所以我们通常称为C/C++编译器,因为它同时支持C和C++,例如 Windows 下的微软编译器(cl.exe),Linux 下的 GCC 编译器。这个时期的C++非常粗糙,仅支持简单的面向对象编程,也没有自己的编译器,而是通过一个预处理程序(名字叫 cfront),先将C++代码”翻译“为C语言代码,再通过C语言编译器合成最终的程序。再讲解C++,主要包括C++和C的一些差别,以及面向对象编程和泛型编程。原创 2023-03-05 10:14:46 · 3338 阅读 · 0 评论 -
C++函数重载过程中的二义性和类型转换
说起函数重载,我不由得想起了C++的“多态”特性。多态又分为静态(编译时)多态和动态(运行时)多态,静态多态即为函数重载,动态多态则是虚函数机制。虚函数水较深,先不讨论,今天我们来看一下函数重载、作用以及要避免的一些坑(尤其是二义性错误)。原创 2023-03-05 10:04:57 · 336 阅读 · 0 评论 -
C++函数重载详解
在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。但在C++中,这完全没有必要。C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途。参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。原创 2023-03-04 09:29:28 · 95 阅读 · 0 评论 -
C++到底在什么地方指定默认参数
继续对代码进行修改,将 func() 定义处 b、c 的默认值分别设置为 5、57,而声明处 b、c 的默认值不变,依然为 10、36。站在编译器的角度看,它不管当前作用域中是函数声明还是函数定义,只要有默认参数就可以使用。对于示例1,func() 的定义和声明位于同一个源文件,它们的作用域也都是整个源文件,这样就导致在同一个文件作用域中指定了两次默认参数,违反了 C++ 的规定。在多文件编程时,我们通常的做法是将函数声明放在头文件中,并且一个函数只声明一次,但是多次声明同一函数也是合法的。原创 2023-03-04 09:25:33 · 327 阅读 · 0 评论 -
C++如何规范地使用内联函数
在多文件编程中,我们通常将函数的定义放在源文件中,将函数的声明放在头文件中,希望调用函数时,引入对应的头文件即可,我们鼓励这种将函数定义和函数声明分开的做法。内联函数虽然叫做函数,在定义和声明的语法上也和普通函数一样,但它已经失去了函数的本质。函数是一段可以重复使用的代码,它位于虚拟地址空间中的代码区,也占用可执行文件的体积,而内联函数的代码在编译后就被消除了,不存在于虚拟地址空间中,没法重复使用。更为严格地说,内联函数不应该有声明,应该将函数定义放在本应该出现函数声明的地方,这是一种良好的编程风格。原创 2023-02-26 14:10:51 · 241 阅读 · 0 评论 -
C++ 内联函数也可以用来代替宏
发生函数调用时,编译器会先对实参进行计算,再将计算的结果传递给形参,并且函数执行完毕后会得到一个值,而不是得到一个表达式,这和简单的字符串替换相比省去了很多麻烦,所以在编写 C++ 代码时我推荐使用内联函数来替换带参数的宏。说了这么多,我最终想强调的是,宏定义是一项 “细思极密” 的工作,一不小心就会踩坑,而且不一定在编译和运行时发现,给程序埋下隐患。这是因为,宏展开仅仅是字符串的替换,不会进行任何计算或传值,上面的。这一点和非内联函数不同,非内联函数是禁止定义在头文件中的,它所在的头文件被多次。原创 2023-02-26 14:07:17 · 94 阅读 · 0 评论 -
C++ inline内联函数详解
使用内联函数的缺点也是非常明显的,编译后的程序会存在多份相同的函数拷贝,如果被声明为内联函数的函数体非常大,那么编译后的程序体积也将会变得很大,所以再次强调,一般只将那些短小的、频繁调用的函数声明为内联函数。这种在函数调用处直接嵌入函数体的函数称为。当函数比较复杂时,函数调用的时空开销可以忽略,大部分的 CPU 时间都会花费在执行函数体代码上,所以我们一般是将非常短小的函数声明为内联函数。由于内联函数比较短小,我们通常的做法是省略函数原型,将整个函数定义(包括函数头和函数体)放在本应该提供函数原型的地方。原创 2023-02-26 14:00:02 · 85 阅读 · 0 评论 -
C++变量的定义位置
C89 规定,所有局部变量都必须定义在函数开头,在定义好变量之前不能有其他的执行语句。C99 标准取消这这条限制,但是 VC/VS 对 C99 的支持很不积极,仍然要求变量定义在函数开头。这是因为 C++ 取消了原来的限制,变量只要在使用之前定义好即可,不强制必须在函数开头定义所有变量。C++ 不但在C语言的基础上进行了很多扩展,而且也对C语言部分做了细节上的改进,变量的定义位置就是其中之一。C89 和 C99 是两套不同的C语言标准,C99 是 C89 的升级版,我们已在。将上面的代码再保存到源文件。原创 2023-02-25 08:49:15 · 442 阅读 · 0 评论 -
C++输入输出(cin和cout)
C++ 库定义了大量的类(Class),程序员可以使用它们来创建对象,cout 和 cin 就分别是 ostream 和 istream 类的对象,只不过它们是由标准库的开发者提前创建好的,可以直接拿来使用。在C++语言中,C语言的这一套输入输出库我们仍然能使用,但是 C++ 又增加了一套新的、更容易使用的输入输出库。C++ 中的输入与输出可以看做是一连串的数据流,输入即可视为从文件或键盘中输入程序中的一串数据流,而输出则可以视为从程序中输出一连串的数据流到显示屏或文件中。当然这段代码中也可以用。原创 2023-02-25 08:22:11 · 346 阅读 · 0 评论 -
C++头文件和std命名空间(精辟)
C++ 是在C语言的基础上开发的,早期的 C++ 还不完善,不支持命名空间,没有自己的编译器,而是将 C++ 代码翻译成C代码,再通过C编译器完成编译。这个时候的 C++ 仍然在使用C语言的库,stdio.h、stdlib.h、string.h 等头文件依然有效;此外 C++ 也开发了一些新的库,增加了自己的头文件,例如:iostream.h:用于控制台输入输出头文件。fstream.h:用于文件操作的头文件。complex.h:用于复数计算的头文件。原创 2023-02-25 08:19:42 · 591 阅读 · 0 评论 -
C++命名空间(名字空间)详解
在代码的开头用using声明了 Li::fp,它的意思是,using 声明以后的程序中如果出现了未指明命名空间的 fp,就使用 Li::fp;命名空间内部不仅可以声明或定义变量,对于其它能在命名空间以外声明或定义的名称,同样也都能在命名空间内部进行声明或定义,例如类、函数、typedef、#define 等都可以出现在命名空间中。在 using 声明后,如果有未具体指定命名空间的变量产生了命名冲突,那么默认采用命名空间 Li 中的变量。是一个新符号,称为域解析操作符,在C++中用来指明要使用的命名空间。原创 2023-02-25 08:11:20 · 297 阅读 · 0 评论 -
如何编译和运行C++程序?
C++ 和C语言类似,也要经过编译和链接后才能运行。下图是 C/C++ 代码生成可执行文件的过程:。原创 2023-02-25 07:59:17 · 294 阅读 · 0 评论 -
学习C++之前要先学习C语言吗?
C++读作“C加加”,是“C Plus Plus”的简称。顾名思义,C++ 是在C语言的基础上增加新特性,玩出了新花样,所以叫“C Plus Plus”,就像 iPhone 7S 和 iPhone 7、Win10 和 Win7 的关系。从语法上看,C语言是 C++ 的一部分,C语言代码几乎不用修改就能够以 C++ 的方式编译,这给很多初学者带来了不小的困惑,学习 C++ 之前到底要不要先学习C语言呢?原创 2023-02-25 07:52:58 · 150 阅读 · 0 评论 -
C++类和对象到底是什么意思?
C++是一门面向对象的编程语言,理解 C++,首先要理解和这两个概念。C++ 中的类(Class)可以看做C语言中结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。运行结果:小明的年龄是 15,成绩是 92.500000C++ 中的类也是一种构造类型,但是进行了一些扩展,类的成员不但可以是变量,还可以是函数;通过类定义出来的变量也有特定的称呼,叫做“对象”。运行结果与上例相同。原创 2023-02-24 20:12:59 · 155 阅读 · 0 评论 -
C++继承时的名字遮蔽问题
如果派生类中的成员(包括成员变量和成员函数)和基类中的成员重名,那么就会遮蔽从基类继承过来的成员。所谓遮蔽,就是在派生类中使用该成员(包括在定义派生类时使用,也包括通过派生类对象访问该成员)时,实际上使用的是派生类新增的成员,而不是从基类继承来的。运行结果:小明的年龄是16,成绩是90.5嗨,大家好,我叫小明,今年16岁本例中,基类 People 和派生类 Student 都定义了成员函数 show(),它们的名字一样,会造成遮蔽。原创 2023-01-13 17:11:40 · 219 阅读 · 0 评论 -
C++函数的默认参数详解
在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。如果用户指定了参数的值,那么就使用用户指定的值,否则使用参数的默认值。C++规定,默认参数只能放在形参列表的最后,而且一旦为某个形参指定了默认值,那么它后面的所有形参都必须有默认值。所谓默认参数,指的是当函数调用中省略了实参时自动使用的一个值,这个值就是给形参指定的默认值。实参和形参的传值是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提。原创 2023-01-12 09:33:22 · 262 阅读 · 0 评论 -
C++ new和delete运算符简介
为了避免内存泄露,通常 new 和 delete、new[] 和 delete[] 操作符应该成对出现,并且不要和C语言中 malloc()、free() 一起混用。在C++中,建议使用 new 和 delete 来管理内存,它们可以使用C++的一些新特性,最明显的是可以自动调用构造函数和析构函数,后续我们将会讲解。在C++中,这两个函数仍然可以使用,但是C++又新增了两个关键字,new 和 delete:new 用来动态分配内存,delete 用来释放内存。原创 2023-01-12 09:30:31 · 73 阅读 · 0 评论 -
C++布尔类型(bool)
bool 类型只有两个取值,true 和 false:true 表示“真”,false 表示“假”。遗憾的是,在 C++ 中使用 cout 输出 bool 变量的值时还是用数字 1 和 0 表示,而不是 true 或 false。注意,true 和 false 是 C++ 中的关键字,true 表示“真”,false 表示“假”。在C语言中,关系运算和逻辑运算的结果有两种,真和假:0 表示假,非 0 表示真。在以后的编码中,我推荐使用 bool 变量来表示逻辑运算、关系运算以及开关变量的值。原创 2023-01-12 09:28:15 · 111 阅读 · 0 评论 -
大话C++模板编程的来龙去脉
计算机编程语言种类繁多,目前能够查询到的有 600 多种,常用的不超过 20 种,TIOBE 每个月都会发布世界编程语言排行榜,统计前 50 名编程语言的市场份额以及它们的变动趋势。该榜单反映了编程语言的热门程度,程序员可以据此来检查自己的开发技能是否跟得上趋势,公司或机构也可以据此做出战略调整。这些编程语言根据不同的标准可以分为不同的种类,根据“在定义变量时是否需要显式地指明数据类型”可以分为强类型语言和弱类型语言。原创 2023-01-11 19:58:05 · 401 阅读 · 0 评论 -
C++函数重载详解
在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。但在C++中,这完全没有必要。C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的。借助重载,一个函数名可以有多种用途。参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。运行结果:200, 100B, A。原创 2023-01-11 10:13:13 · 381 阅读 · 0 评论 -
C++类的定义和对象的创建详解
类是用户自定义的类型,如果程序中要用到类,必须提前说明,或者使用已存在的类(别人写好的类、标准库中的类等),C++语法本身并不提供现成的类的名称、结构和内容。public ://成员变量 char * name;int age;//成员函数 void say() {cout原创 2023-01-11 09:55:46 · 351 阅读 · 0 评论 -
C++派生类的析构函数实例详解
大家可以看到定义一个派生类AlarmClock会先产生基类,同时析构顺序却是相反的。构造函数调用顺序:基类->派生类。析构函数调用顺序:派生类->基类。同上一节一样,在派生类中,也无法被派生类吸收。原创 2023-01-09 16:30:03 · 133 阅读 · 0 评论 -
【跨年项目代码】用C语言来写“烟花”,快拿去给心中的那个人看
好了,大家学废了嘛,这不是很难,效果还不错,大家可以尝试的去写一下,程序员的浪漫不止于此哦,哈哈哈!原创 2022-12-26 18:15:45 · 1505 阅读 · 0 评论 -
10道CSP 2020 入门级测试题你能答对几道(第一轮)
正确答案: A你答对了吗? 正确答案: A你答对了吗? 正确答案: D你答对了吗? 正确答案: C你答对了吗? 正确答案: C你答对了吗? 正确答案: A你答对了吗? 正确答案: A你答对了吗? 正确答案: A你答对了吗? 正确答案: A你答对了吗? 正确答案: A你答对了吗?原创 2022-12-21 20:35:31 · 334 阅读 · 0 评论 -
CSP认证201712-1
【代码】CSP认证201712-1。原创 2022-12-16 20:00:33 · 142 阅读 · 0 评论 -
如何用c++写联机小游戏?
先用简单的socket实现服务器和客户端,简单的socket实现就是一个服务器,一两个客户端,暂时不考虑多玩家连接,这些都可以在网上(比如csdn)找到现成的代码(一般是两个console聊天),改一改,加一些自己的游戏协议,再做个游戏界面(推荐EasyX或EGE,贴吧里面也有别人做的线程的联机游戏,自己找找)。再复杂点MMO多玩家的,一般git上面都是基于IOCP或者POLL的,推荐。原创 2022-12-16 18:27:24 · 1273 阅读 · 0 评论 -
数据排序 C++
主要:原来有树的地方设置为1,下面出现的范围,在范围内设置为0,最后统计1的总数,就是剩下树木的数量.2.然后进行ch++,这个代表是检查,一个数组当中是否存在数字是数组的一半多,如果不存在要输出no。3.还有一个值得注意的点是,数组的一半应该被设置为double数组,存在奇数数组,.1.b[a[i]]相当于把a[i]的那个数字所在数组的位置++题目 1099: 校门外的树。原创 2022-12-11 14:56:21 · 155 阅读 · 0 评论 -
用VS软件开发“中国象棋“游戏
首先先加载出棋盘背景,然后把棋盘上面行和列交叉的位置都设置为SPACE,可以理解为初始化棋盘.然后如果j原创 2022-12-11 14:45:59 · 317 阅读 · 0 评论 -
C/C++ 新生入学管理系统
通过此系统可以实现如下功能:(1)用户登录,用户分为管理员和新生两种不同角色功能不同。(2)管理员模块功能:管理员可以添加学生用户,修改学生信息,查询学生信息,删除学生用户等操作,并能够汇总新生注册人数。(3)学生模块功能:学生可以登录后,实现注册报到、查看或修改个人信息、查看报到状态、查看宿舍和班级情况、查看注册报到流程。要求:新生数据文件(包括学号、身份证号、姓名等个人信息) 读写操作通过文件实现。可以附加入学报到流程的地图导引,如巡天楼注册缴费——宿舍领取钥匙——食堂办理饭卡——图书馆办理借书证原创 2022-12-11 10:29:04 · 786 阅读 · 0 评论 -
C++工资管理系统
(1):MFC 应用:创建职工信息类,包含姓名、月份、职工编号、基本工资、津贴、岗贴、补贴、房贴、交通补贴、应发数、房租、储蓄、会费、个人所得税、应扣数和实发数等,派生自CObiect类,实现序列化操作;在文档类中添加存储职工信息的链表或数组(可用MFC的集合类),在文档类 Serialize()函数中实现序列化:通过菜单打开对话框,在对话框中实现创建、添加、修改、删除和查询功能并及时更新文档(用多个对话框):视图类显示查询结果:输入的信息可保存到文件并可读出。(1)创建存储职工工资信息的存储系统;原创 2022-12-11 10:24:30 · 590 阅读 · 0 评论 -
C/C++小型文本查询引擎
① 允许一次输入两个或者更多个单词进行查询,即:先获得这些单词各自在文档中出现的位置信息,然后再分析这些单词的位置信息,判断这些单词在原始文档中是否存在连续出现的情况。该单词是文档的第几个单词,序号从1开始)。如果一个单词在文档中出现多次,则该链表中将包含多个结点,并按照单词在文档中出现的次序(位置信息)递增排序。等等),将二叉查找树中的属于停用词表中的单词依次删除(不仅删除结点,还需清空记录该单词位置信息的单链表);每个单词占一行,每行依次记录单词、该单词出现的次数、以及该单词在文档中的位置信息。原创 2022-12-11 10:18:42 · 651 阅读 · 3 评论 -
C++入门
题目 1267: A+B Problem题目 2749: Hello, World!题目 2997: 梯形面积题目 2998: 电影票题目 2999: 牛吃牧草题目 2181: 信息学奥赛一本通T1005-地球人口承载力估计原创 2022-12-11 10:13:25 · 351 阅读 · 0 评论 -
用VS开发一款“飞机大战“单机游戏<C++>
比如小飞机出现了5次,而大飞机才出现一次这样,当然敌飞机出现肯定不是我们可以控制的,它肯定是随机出现的,所以这里我们采用一个随机范围,如果在0-2之间就出现大飞机,3-9之间小飞机,这样是不是小飞机的概率要高于大飞机.其余的进入条件之内直接初始化就可以了.此案例当中,需要我们加载的图片有背景图,自己飞机图,子弹图,敌方飞机1和敌方飞机2,如果读者也自己添加第三台和第四台敌机,也可以直接添加,不过要注意,当一种对象,存在多个类型的时候,要采用数组将其存储,方便之后进行使用.原创 2022-12-11 10:06:12 · 213 阅读 · 0 评论 -
“浪漫烟花“程序<VS-C++>
此时要设定一个布尔类型,用以判断烟花弹是否可以发射.在这过程当中,发射的速度是匀速的,可以直接定义速度,当然这里采用定义时间的方式去进行,定义三个时间,分别为t1,t2和dt用来控制速度的变化.存储每一个位置的图片采用IMAGE函数。再次使用当前背景色清空绘图设备,然后编辑字体为楷体,字号为25,采用settextstyle()函数,接下来,就是在不同的位置依次输出你想输入的文本.采用outtextxy()函数。这里byte n:1;原创 2022-12-11 09:54:23 · 853 阅读 · 0 评论