
C++
文章平均质量分 65
YakSue
这个作者很懒,什么都没留下…
展开
-
学习在C++中使用位运算符做“int”和“4个char”之间的转换
学习在C++中使用位运算符做“int”和“4个char”之间的转换原创 2022-06-22 12:54:10 · 2482 阅读 · 0 评论 -
一种在C++中外部强行访问私有成员的方法
问题C++在设计上,是不允许类的私有成员在外部被访问读写的。然而,有时是想要在外部访问私有成员的。我目前常见的情况是:想要访问UE引擎代码中的类的私有成员,但又不想“污染”其源代码将其private改为public。方法一种方法是,再建立一个完全相同结构的类,只不过将成员改为public:class MyClassA_MirrorPublic{public: int data1; int data2; int data3;public: MyClassA_MirrorPublic(原创 2021-10-24 12:20:53 · 856 阅读 · 0 评论 -
学习与实验C++中的类型强制转换操作
目标在C或C++中,可以使用 “()” 来将一个对象的类型进行强制转换。在C++中,也有很多后缀为_cast的强制转换运算符,例如static_cast、dynamic_cast等。本篇的目标是,结合官方文档和自己的实验:学习他们的基本含义实验尝试他们的基本用法实验比较他们行为的区别static_cast(static_cast 官方文档)定义static_cast <type-id> ( expression )Converts an expression to原创 2021-02-10 21:47:09 · 550 阅读 · 0 评论 -
实验:C++中有继承关系类型间指针强制转换行为的正确性
目标我在使用C++时经常有“将一个子类指针转换为基类指针,再在需要时转换为子类指针”的行为。大多时候没发现问题,以至于让我产生错觉: “觉得只要确实是一个子类对象,那么不管其指针类型如何在基类与子类间转换,都不会出问题” 。而这一错觉让我在最近一个牵扯到多重继承的环境下,指针转换出现了问题。因此我想专门对这一问题做些实验,本篇的目标是:实验在各种情况下指针强制转换行为是否能保证正确性。在实验与思考的过程中,我从《C++多重继承下的指针类型转换 - 敲代码的小阿狸 - 博客园》中得到些提示。实验原创 2020-12-27 23:08:10 · 1432 阅读 · 1 评论 -
实验C语言“union”的最基础语法
目标最近在看Rust的“菜鸟教程”,看到 Rust 枚举类 时我发现它所定义的“枚举类”虽然也能像C语言枚举类那样使用,但是多了些功能:对于某个枚举的成员,还可以附带独特的数据,这让我想起了C语言中的union。而我事实上对union没有使用经验,我自己写程序的时候不用它,看其他的项目的程序时印象里也没见过它。所以我对union的设计意图理解不深(可能只是为了节省内存?)。本篇的目标是对其基础的语法做一些实验,参考了 《C 共用体 | 菜鸟教程》实验由于其语法上和struct,我将与其对比实验,代码原创 2020-11-21 18:33:11 · 344 阅读 · 0 评论 -
整理C++中 const 的用法
问题《const (C++) | Microsoft Docs》1.修饰局部变量2.修饰参数3.修饰返回值4.修饰函数总结原创 2020-10-19 23:21:55 · 630 阅读 · 0 评论 -
C++ 在外部访问对象的protected成员的方法
起因实践通用模板讨论原创 2020-09-02 23:20:07 · 8396 阅读 · 4 评论 -
整理C++模板的语法
【模板】是C++实现泛型编程的一种手段。泛型编程的目的,说白了就是对逻辑进行“复用”来减少重复。换句话说:它将针对于特定类型的逻辑,抽象成了纯粹的逻辑,这样就可以适用于广泛的类型。原创 2020-09-01 22:57:24 · 698 阅读 · 1 评论 -
C++关于析构函数的一些小实验
目标对一下问题做一些实验来获得答案:子类与父类的析构函数的调用顺序虚析构函数的作用在父类的析构函数中调用被子类重载的虚函数子类与父类的析构函数的调用顺序#include <iostream>using namespace std;class ClassBase{public: ClassBase() { cout << "父类构造" << endl; } ~ClassBase() {原创 2020-08-01 00:05:57 · 144 阅读 · 0 评论 -
学习C++右值引用
值类型每一个C++表达式都有一个 “值类型”——它是编译器在表达式计算过程中创建、复制和移动临时对象时必须遵循的规则的基础。例如:“=”左边的值就是 “左值(lvalue)”,计算时其地址发挥了作用。“=”右边的值就是 “右值(rvalue)”,计算时其数据发挥了作用。除此之外还有其他的 “值类型”,他们之间的关系如下:详见Value Categories: Lvalues and Rvalues (C++) | Microsoft Docs左值引用在 “右值引用” 出现之前,只有一种“原创 2020-07-23 00:25:58 · 355 阅读 · 0 评论 -
实现一个最基础的智能指针
“智能指针”想要解决的问题假设,现在有一个对象(为了便于测试,在其构造函数与析构函数中输出信息):class TestObject //测试用对象{public: //构造函数 TestObject() { cout << "构造TestObject" << endl; } //析构函数 ~TestObject() { cout << "析构TestObject" << endl; } //测试函数 void TestFun原创 2020-07-19 23:40:07 · 383 阅读 · 0 评论 -
C++实验在基类的构造函数中调用被子类重载的虚函数
子类重载虚函数在C++中,子类可以重载基类的虚函数,这是C++语法中一个重要的多态。例如,ClassB继承自ClassA,且重载了基类的一个函数,则被调用时将会触发重载的版本:#include<iostream>using namespace std;class ClassA{public: virtual void TestFunc() { cout << "ClassA::TestFunc" << endl; }};class C原创 2020-07-13 18:58:26 · 1667 阅读 · 3 评论 -
学习__declspec关键字
之前见到过用__declspec(dllimport)来修饰类或者变量的代码,不过具体其含义我并不能说清。而现在我想要查阅些资料来学习一下。在《__declspec | 微软官方文档》中有对__declspec进行解释:The extended attribute syntax for specifying storage-class information uses the __declspec keyword, which specifies that an instance of a given原创 2020-06-13 23:20:56 · 1700 阅读 · 0 评论 -
C++判断基类指针具体指向的子类
查资料后发现了两种方法可以实现:dynamic_casttypeid不过效果上有差别,下面开始做实验来验证,并且观察差别。实践首先,创建一个基类和一些继承它的子类。并且加入一个虚函数并在子类中返回不同的值:class ClassA { public: virtual int testFunc() { return 1; } };class ClassB : public ClassA { public: virtual int testFunc() override { return 2;原创 2020-06-08 23:08:21 · 9494 阅读 · 3 评论 -
整理C++宏定义的语法
1.宏#define AAA 5使用:cout << AAA<<endl;输出:52.参数的宏#define BBB(x) (x+5)使用:cout << BBB(3)<<endl;输出:83.多参数宏使用...表示参数输入,随后使用##__VA_ARGS__得到参数。定义一个宏,将参数全填到func函数中。#define CCC(...) func(##__VA_ARGS__)使用:int func(int a原创 2020-06-03 00:05:45 · 1453 阅读 · 1 评论 -
尝试制作和使用lib与dll
前言关于lib和dll这两种库的概念,网上已有很多讨论可以参阅。这篇博客主要记录我自己动手尝试用VS来制作lib和dll,并随后使用的过程。dumpbin工具在开始之前,需要介绍一下VS提供的dumpbin工具,这个工具可以看到lib与dll中的函数名字。它被放在VS目录的MSVC目录中,例如目前我是社区版VS2017,则工具的位置在:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.原创 2020-05-17 23:20:29 · 375 阅读 · 0 评论 -
尝试C++里基于范围的"for"语句
使用基于范围的for语句是C++11中的新功能使用如下:#include<iostream>int main(){ const char* list[4] = { "four","three","nine","six" }; for (auto str : list) std::cout << str << std::endl;}如果是之...原创 2020-05-05 21:24:39 · 5586 阅读 · 1 评论