- 博客(34)
- 问答 (1)
- 收藏
- 关注
原创 【一文读不懂Jsoncpp】2.类的初步认识
首先在上节,我们讲了在什么情况下会用到jsoncpp,对它的使用场景有了初步的认识,这节我们先不谈怎么安装和配置环境,而是先聊聊它的简单语法,让你知道它大概是如何使用的,引申出它的类。
2023-06-19 09:05:32
173
原创 【一文读不懂Jsoncpp】3.序列化和反序列化
首先在上节,我们讲了Json::Value的基本使用,又简单介绍了其他的类,这节我们讲讲上节遗留的问题,什么是序列化和反序列化。
2023-06-19 09:04:58
270
原创 【一文读不懂Jsoncpp】1.起始篇
现在技术教程都太古板和僵硬,由于本人理解力不高,很难理解官方教程,所以就想有没有一个可以和生活联系起来的趣味方法,来帮助我理解,这也就是写一文读不懂系列的初衷。恰逢自己初入职场一周年,输出干货类文章,也是对自己的交代。我一直坚信,学一项技术首先知道为什么会有它的存在,它的存在是有什么意义吗?文绉绉的官方术语我听不懂,只想知道在生活中有什么用。
2023-06-19 09:02:26
94
原创 【最容易理解】什么是线程池
线程池是一种软件设计模式,用于在计算机程序中实现执行的并发性。它通过控制几个可重用的线程来执行这些任务。这种模式允许我们控制应用程序创建的线程数量和它们的生命周期。我们还可以安排任务的执行并将传入的任务保留在队列中。线程池的一个优点是它可以减少创建和销毁线程的开销。当你向线程池提交一个任务时,它会在一个可用的线程上执行该任务。当该任务完成后,该线程不会被销毁,而是返回到线程池中,以便在将来重用。此外,线程池还可以帮助你控制程序中活动线程的数量。
2023-06-08 15:13:14
67
原创 【一文读懂】对象引用和对象指针
对象指针存储的是对象的地址,而不是对象本身。因此,当你想通过指针访问对象时,需要先解引用指针,才能获取指针所指向的对象。接下来,我们分别使用三种方式访问该对象:直接访问、通过对象引用访问和通过对象指针访问。它可以简化代码,因为它允许你直接通过指针访问对象的成员,而无需先解引用指针。第二个参数,传进来的这个东西,是个sTunnl对象的指针,*是解引用,相当于是把传进来的东西放在*sBase里面。这样,你就可以直接通过指针访问对象的成员,而无需先解引用指针。如果想通过对象引用访问对象的成员,应该直接使用。
2023-06-08 14:39:03
587
原创 【新手必看】2023年C++开发经验
多态性”(polymorphism)一词意味着具有多种形式。简单来说,我们可以将多态性定义为消息以多种形式展示的能力。多态性的一个真实例子是一个人可以同时具有不同的特征。男人同时是父亲、丈夫和雇员。所以同一个人在不同的情况下会表现出不同的行为。这称为多态性。多态性被认为是面向对象编程的重要特征之一。多态性的类型编译时的多态性运行时的多态性。
2023-06-05 10:55:21
1028
原创 #pragma comment是什么
C++中经常有类似这样一行代码pragma comment(lib, "DllTest.lib")#pragma comment是一个编译器指令,指示 Visual C++ 在生成的对象文件中留下注释。然后,链接器可以在处理目标文件时读取注释#pragma comment(lib, "DllTest.lib")告诉链接器将“DllTest.lib”库添加到库依赖项列表中...
2023-04-24 21:38:00
3369
原创 【为什么】_stprintf_s,TCHAR,_T
在 Visual C++ 中,字符串可以用 8 位 ANSI 标准或 16 位 Unicode 表示。函数的第一个参数是要格式化的字符串,第二个参数是要插入到字符串中的值。宏可以保证从 ASCII 编码类型转换到 Unicode 编码类型的时候,程序不需要修改。,这是一种 Windows API 中使用的数据类型,它可以根据编译器设置自动转换为。是两个字节(16 位)或四个字节(32 位)长,具体取决于编译器和操作系统。都是 C++ 中的字符类型,但它们之间有一些区别。,则所有字符串都将是 ANSI。
2023-04-04 16:34:09
896
原创 【为什么】在大型项目中为什么不能用using namespace std;
在大型项目中,使用using namespace std;会存在以下几个问题:命名冲突:使用using namespace std;会将所有std命名空间下的名称都引入当前命名空间,可能会与当前项目中的其他标识符冲突,导致编译错误。可读性差:如果在项目中使用大量的命名空间,代码可能会变得难以阅读和理解,因为不知道哪个标识符映射到哪个命名空间。可维护性差:在大型项目中,多人协作开...
2023-03-24 16:28:00
472
原创 【为什么】override关键字表示该函数会覆盖基类中的虚函数
override关键字表示该函数会覆盖基类中的虚函数,即在派生类中重新实现了基类中的同名虚函数。在C++中,派生类可以重载其父类的虚函数。使用override关键字可以很好地指出该函数是目标函数,因为当以下情况出现时,使用override关键字会在编译时帮助我们检查错误:如果父类中没有具有相同签名的虚函数,则会发生编译错误。如果函数签名参数与基类中的虚函数不匹配,则会发生编译错误。如果该...
2023-03-24 16:00:00
158
原创 【为什么】C++ 中需要运算符重载
运算符重载的主要目的是为了方便程序员使用自定义类型。在某些情况下,C++的内置类型可能无法满足程序的需要,需要使用自定义类型。在这种情况下,合适的操作符重载可以使自定义类型的操作像内置类型一样自然。运算符重载的另一个目的是提高代码的可读性和可维护性。操作符重载允许我们在代码中使用一些符号,帮助我们表达代码的目的,而无需使用冗长的函数名称。此外,C++标准库提供了许多用于处理自定义类型的函数和...
2023-03-24 15:37:00
653
原创 【为什么】选用int64_t而不是longlong
int64_t 是 C++ 中的一种整型数据类型,占用 8 个字节(64 位),可以存储的整数范围是从 -9223372036854775808 到 9223372036854775807。它是一种固定长度的数据类型,可以保证在不同的平台上都有相同的位数和取值范围,适用于需要存储大整数的场合。在某些系统中,也可以用 long long int 代替 int64_t。使用 long long 存...
2023-03-24 15:24:00
1914
原创 【为什么】C++中的宏
C++宏的简单理解C++中的宏是一种代码片段,可以被宏的值所替换。宏是用#define指令来定义的,用#undef指令来取消定义。宏有两种类型:类对象宏和类函数宏。类对象宏就像一个常量,只不过不需要分配内存空间。类函数宏就像一个函数,只不过不需要调用和返回。大白话来说,宏就是一种让你写代码时更方便、更简洁、更灵活的工具举例说明假设你想定义一个宏,用来计算两个数的最大值。你可以这样写:...
2023-03-24 10:15:00
1343
原创 【为什么】C++中的#pragma once是干什么,和#include guard区别
一.#pragma once是C和C++编程语言中的一个非标准但广泛支持的预处理指令,用于使当前源文件在单次编译中只被包含一次。它与#include guards有相同的作用,但有一些优点,如:代码更少,避免名称冲突,有时可以提高编译速度代码例子:// Foo.h #pragma once class Foo { };这个指令告诉编译器只包含一次Foo.h文件,不管它被导入了多少...
2023-03-24 09:26:00
2131
原创 【为什么】到底什么是多态?
“多态性”(polymorphism)一词意味着具有多种形式。 简单来说,我们可以将多态性定义为消息以多种形式展示的能力。多态性的一个真实例子是一个人可以同时具有不同的特征。 男人同时是父亲、丈夫和雇员。 所以同一个人在不同的情况下会表现出不同的行为。 这称为多态性。 多态性被认为是面向对象编程的重要特征之一。多态性的类型编译时的多态性运行时的多态性1.编译时多态性这种类型的多...
2023-02-23 17:21:00
93
原创 【为什么】构造函数中可以调用虚函数吗?
class Base{public: Base() { Fuction(); } virtual void Fuction() { cout << "Base::Fuction" << endl; }};class A : public Base{public: A() { Fuction(); } virtual voi...
2023-02-23 16:54:00
56
原创 【为什么】我可以从构造函数中调用虚函数吗?C++之父谈
是的,但要小心。 它可能不会做你期望的。 在构造函数中, 虚拟调用机制被禁用,因为从派生覆盖 课程还没有发生。 对象是从基础向上构建的, “派生前的基础”。考虑到#include<string> #include<iostream> using namespace std; class B { public: B(const string& ss...
2023-02-23 16:50:00
88
原创 【为什么】什么是纯虚函数?C++之父谈
纯虚函数是指不必在基类中定义,但必须在派生类中被覆盖(override)的函数。通过新奇的“=0”语法可将虚函数声明为纯虚函数。例如:class Base { public: void f1(); // 不是虚函数 vi...
2023-02-19 23:39:00
201
原创 【为什么】引用和指针
在C++中,&符号有几种不同的含义,取决于上下文。如果&是引用操作的话,它可以创建一个别名或替代名称来引用另一个变量。例如:int myNumber = 10; int& Number = myNumber; // Number is a reference to myNumber Number = 25; // This changes both Number a...
2023-02-18 12:37:00
46
原创 【为什么】使用数组的指针
您还可以创建指向数组的指针,这是按如下方式完成的int *pArray;pArray = new int[6];这将创建一个指针,pArray,并使其指向一个包含六个元素的数组。另一种不使用动态内存分配的方法如下:int *pArray;int MyArray[6];pArray = &MyArray[0];请注意,您可以简单地编写 MyArray 而不是编写 &My...
2023-02-18 12:21:00
51
原创 【为什么】指向类的指针
还有一些关于指针的其他注意事项,其中之一是结构或类。 你可以定义一个类如下:class MyClass{public: int m_Number; char m_Character;};然后,您可以定义一个类型的变量 MyClass如下:MyClass thing;你应该已经知道了。 如果没有,请尝试阅读该区域。 定义指向的指针 MyClass,你会使用:MyCl...
2023-02-18 12:07:00
51
原创 【为什么】将指针传递给函数
将指针传递给函数的能力非常有用,但也很容易掌握。 如果我们要编写一个程序,接受一个数字并将其加五,我们可能会编写如下内容:#include <stdio.h>void AddFive(int Number){ Number = Number + 5;}void main(){ int nMyNumber = 18; printf("M...
2023-02-18 12:02:00
87
原创 【为什么】指针,动态内存的例子
#include <stdio.h>int *pPointer;void SomeFunction();{ int nNumber; nNumber = 25; // make pPointer point to nNumber: pPointer = &nNumber;}void main(){ SomeF...
2023-02-18 11:25:00
44
原创 【为什么】有什么区别 new 和 malloc() ?C++之父谈
malloc() 是一个以数字(字节)作为参数的函数; 它返回一个 void* 指向单元化存储。 new 是一个运算符,它接受一个类型和(可选)该类型的一组初始值设定项 作为它的论点; 它返回一个指向其类型的(可选)初始化对象的指针。 当您要分配用户定义类型的对象时,差异最为明显 具有独特的初始化语义。 例子: class Circle : public Shape { pub...
2023-02-17 22:42:00
50
原创 【为什么】new后可以用free吗
虽然语言不会阻止您这样做,但您永远不应该在使用 C++ new 运算符收到的块上使用 C free 函数。 始终对从 new 运算符接收的块使用 C++ delete 运算符,对从 new[] 运算符接收的块使用 delete[] 运算符。new 运算符为您正在分配的数据类型执行构造函数,而 new[] 运算符为您正在分配的数组的每个元素执行构造函数。 同样,delete 运算符为对象执行析构...
2023-02-17 21:14:00
447
原创 【为什么】我应该使用 NULL 还是 0?C++之父谈
在C++中,NULL的定义是0,所以只是审美上的区别。我更喜欢避免宏,所以我使用 0。NULL 的另一个问题是人们有时会错误地认为它 不同于 0或不是整数。在准标准代码中,NULL 有时被定义为 不合适的东西 因此必须避免。现在这种情况不那么常见了。如果一定要给空指针命名,就叫它nullptr;这就是它在 C++11 中的名称。然后,“nullptr”将成为关键字。此文为C++之父撰写,本篇为翻译。
2023-02-17 21:01:00
74
原创 【为什么】我应该使用按值调用还是按引用调用?C++之父谈
我不知道一个强有力的逻辑原因。如果传递“不是一个对象”(例如空指针)是可以接受的,那么使用指针是有意义的。当我想修改一个对象时,我的个人风格是使用指针,因为在某些情况下,这样更容易发现修改是可能的。所以,我更喜欢返回一个新的值而不是修改原来的值,只要新创建的值的创造和复制并不昂贵。另请注意,成员函数的调用本质上是对对象的按引用调用,因此当我们想要修改对象的值/状态时,我们经常使用成员函数。好吧,我们通常不得不这样做,但通常我们有另一种选择:产生新的值。我确实想更改参数,我应该使用指针还是应该使用引用?
2023-02-17 20:58:00
48
原创 【为什么】C++既有指针又有引用?C++之父谈
更一般地说,如果你想同时拥有指针的功能和引用的功能,你需要两种不同的类型(如在 C++ 中)或对一种类型的两组不同的操作。例如,对于单一类型,您既需要分配给所引用对象的操作,也需要分配给引用/指针的操作。这可以使用单独的运算符来完成(如在 Simula 中)。C++ 从 C 继承了指针,所以我不能在不导致严重的兼容性问题的情况下删除它们。引用在很多方面都很有用,但我在 C++ 中引入它们的直接原因是为了支持运算符重载。或者,您可以依赖类型检查(重载)。此文为C++之父撰写,本篇为翻译。
2023-02-17 20:47:00
127
原创 【为什么】默认情况下析构函数不是虚拟的
因为很多类并不是设计来作为基类使用的, 虚函数仅在用作派生类对象接口的类中有意义(通常分配在堆上并通过指针或引用访问)
2023-02-17 20:24:00
63
空空如也
怎么用C++来实现不同文件类型的转换?
2021-04-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人