- 博客(217)
- 问答 (1)
- 收藏
- 关注
原创 C# 预处理指令 #
define 它用于定义一系列成为符号的字符。#undef 它用于取消定义符号。#if 它用于测试符号是否为真。#else 它用于创建复合条件指令,与 #if 一起使用。#elif 它用于创建复合条件指令。#endif 指定一个条件指令的结束。#line 它可以让您修改编译器的行数以及(可选地)输出错误和警告的文件名。#error 它允许从代码的指定位置生成一个错误。#warning 它允许从代码的指定位置生成一级警告。
2024-03-27 22:19:29 115
原创 C# 接口 interface
在C#中,接口(Interface)是一种引用类型,它定义了一组方法的契约,但不包含实现。接口允许不同的类实现相同的方法集,从而。接口在C#编程中扮演着非常重要的角色,它们是实现多态性的关键方式之一,同时也是实现代码解耦和增强代码可维护性的重要工具。
2024-03-27 17:10:43 367
原创 C# this
的参数,这个参数是类的当前实例。虽然通常不需要显式使用它,但在某些情况下,如扩展方法或委托中,你可能会看到它的使用。是一个关键字,它指代当前类的实例。当你在类的成员方法或属性中使用。,可以实现链式调用。这在构建器模式或配置类的上下文中特别有用。当类的成员变量和方法的局部变量具有相同的名称时,可以使用。也可以用于调用其他构造函数(称为构造函数链)。中,类的非静态方法实际上是隐式地接收一个名为。时,你实际上是在引用当前类的当前实例。一样能一直调用,这样不用打很多次。在类的某些方法中返回。
2024-03-27 14:52:40 102
原创 C# var
可以使代码更简洁,但在某些情况下,它可能会降低代码的可读性。特别是当变量的类型不是从上下文中显而易见时,使用明确的类型声明可能会更好。这可能导致未预期的行为,特别是在大型项目中。时,编译器会根据初始化表达式自动推断变量的类型。这有助于减少代码的冗余,并使得代码更简洁。是一个有用的工具,但应该谨慎使用,确保它不会降低代码的可读性或引入潜在的问题。编译器仍然会确保类型正确,并在必要时进行类型转换或引发错误。:如果你在后续的代码中更改了初始化表达式的类型,那么所有使用该。:你不能在类的字段或属性声明中使用。
2024-03-27 13:43:21 222
原创 C# get set 访问器
你可以在 set 访问器中添加验证逻辑,比如检查新值是否满足某些条件,或者在赋值前对新值进行转换。访问器会被调用,并返回属性的值。你可以在其中添加任何你需要的逻辑,比如计算属性的值,或者返回缓存的值等。)的关键词,它们用于定义属性的读取和写入行为。属性提供了一种比公共字段更灵活和可控的方式来访问类的数据。限制对属性的访问,比如只允许读取不允许写入,或者只允许在特定条件下进行访问。通过属性,你可以隐藏字段的实际名称和类型,只暴露一个清晰的接口给类的使用者。访问器中根据其他字段的值计算属性的值。
2024-03-26 21:28:03 255
原创 C# 多态 派生类 abstract virtual new
基类中必须有一个具有相同签名(即相同的名称、参数列表和返回类型)的虚方法或抽象方法。派生类继承自基类:包含。
2024-03-22 00:42:04 583
原创 C# 类的操作
静态变量用于定义常量,因为它们的值可以通过直接调用类而不需要创建类的实例来获取。静态变量可在成员函数或类的定义外部进行初始化。关键字把类成员定义为静态的。当我们声明一个类成员为静态时,意味着无论有多少个类的对象被创建,只会有一个该静态成员的副本。一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。类的 析构函数 是类的一个特殊的成员函数,当类的对象超出范围时执行。类的 构造函数 是类的一个特殊的成员函数,当创建类的新对象时执行。构造函数的名称与类的名称完全相同,它没有任何返回类型。
2024-03-22 00:24:03 422
原创 静态方法 static foo()
而在Python 3中,如果一个类的方法不需要self参数,不再需要声明为静态方法,但是这样的话只能通过类去调用这个方法,如果使用实例调用这个方法会引发异常。但通常建议通过类名来使用静态方法,因为静态方法只要定义了类,不必建立类的实例就可使用。在处理大量功能模块和多个代码文件时,静态方法能够组织不同的方法为一个单独的类,避免在不同程序文件中查找函数的麻烦。总之,静态方法因其独特的特性和优势,在编程中扮演着重要的角色,特别是在提高代码效率、可维护性和复用性方面。这些方法属于类本身,而不是类的某个具体对象。
2024-03-21 20:23:27 268
原创 C# 数组
声明一个数组不会在内存中初始化数组。当初始化数组变量时,您可以赋值给数组。数组是一个引用类型,所以您需要使用 new 关键字来创建数组的实例。
2024-03-21 19:01:22 446
原创 C# 判断变量类型 GetType 未解决
在C#中,GetType() 方法是一个内置的成员,用于获取对象运行时的类型信息。这个方法返回的是一个 System.Type 对象,该对象代表了调用它的实例的类型。System.Type 类包含了许多方法和属性,允许你查询类型的元数据(metadata),比如类型的名称、它的基类型、实现的接口、包含的成员(字段、属性、方法等)等。
2024-03-20 23:30:41 398
原创 C# System.Console.WriteLine的格式化输出
其中,{}表示占位index指索引占位符,这个肯定都知道;,alignment按字面意思显然是对齐方式,以为标记;就是对输出格式的限定,以为标记。
2024-03-20 23:21:20 444
原创 C#中Console.WriteLine()函数输出格式详解
alignment:可选,是一个带符号的整数,指示首选的格式化字段宽度。如果“对齐”值小于格式化字符串的长度,“对齐”会被忽略,并且使用格式化字符串的长度作为字段宽度。如果“对齐”为正数,字段的格式化数据为右对齐;如果“对齐”为负数,字段的格式化数据为左对齐。如果指定“对齐”,就需要使用逗号。“:formatString"就是对输出格式的限定,以”:"为标记。“,alignment"按字面意思显然是对齐方式,以”,"为标记;// Console.WriteLine 中各种数据格式的输出。
2024-03-20 23:20:34 741
原创 构造函数初始化列表
/因为先声明的math,但是当把English+10的值赋给math的时候还不知道English,{//student接收传进来的两个数m和n,然后m赋值给shengao,n赋值给tizhong。{//student接收传进来的两个数,然后将两个数分别赋值给shengao,tizhong。二、成员变量的初始化顺序只与成员变量在类中声明的顺序有关,与初始化列表中列出的变量的顺序无关。//所以输出的math是个不确定的值(输出的math是个垃圾值)cout
2024-03-19 00:43:28 840
原创 C++ 类构造函数 & 析构函数
析构函数会按照类的继承顺序从基类到派生类的顺序依次调用。析构函数会按照创建对象的顺序从最后创建的对象到最先创建的对象的顺序依次调用。析构函数会按照对象内部成员变量的声明顺序从最后声明的成员变量到最先声明的成员变量的顺序依次调用。int id;return id;showId();showName();bo.show();ao.show();return 0;
2024-03-19 00:39:32 474
原创 C++ 类访问修饰符
成员,这个成员只能被自己和友元访问了,所以第二类的派生类(第三类)就无法访问这个成员了。简言之就是看从自己的上一个基类是啥类型,成员只能被本类成员(类内)和友元访问,不能被派生类访问;三种继承方式,它们相应地改变了基类成员的访问属性。继承到第二类后,再由第三类继承第二类时,基类中的。成员可以被派生类访问。成员在第二类中变成了。
2024-03-18 23:33:46 370
原创 更安全的C gets()和str* 以及fgets和strcspn的用法
可以说全是错误首先char *str没有指向一个分配好的地址,就直接读入,危险ps:怎么理解是将一个存储在一个只读的数据段中字符串常量的首地址赋值给了尝试从标准输入读取一个字符串并存储在str指向的位置。但是,由于str没有被初始化为指向有效的内存,gets函数可能会尝试写入一个随机的内存地址,这会导致程序崩溃或更糟糕的后果。puts(str);试图打印从gets读取的字符串。但是,由于gets可能导致未定义行为,str指向的内容可能是不确定的,所以puts的行为也是不确定的。更糟糕的是,
2024-03-16 22:59:16 522
原创 C++ time
在C语言中,localtime是一个函数,用于将自1970年1月1日(UTC)以来的秒数(通常称为时间戳或Unix时间)转换为本地时间的struct tm格式。这个转换考虑了本地时区以及夏令时(如果适用)的影响。在这个示例中,time函数用于获取当前时间的时间戳,然后localtime将其转换为本地时间,并通过asctime转换为人类可读的字符串格式进行打印。函数返回一个指向struct tm的指针,该结构体包含了分解后的本地时间信息,如年、月、日、小时、分钟、秒等。
2024-03-16 18:22:56 362
原创 函数返回二维数组
在C语言中,函数不能直接返回二维数组,因为数组名作为函数参数或返回值时,会退化为指向数组首元素的指针。此外,C语言不支持返回局部数组的引用,因为局部数组在函数返回后其内存会被释放。
2024-03-15 01:02:24 320
原创 C++ lambda函数个人理解
(3)-> return_type:->后面为lambda函数的返回类型,如 -> int、-> string等。一般情况下,编译器推出lambda函数的返回值,所以这部分可以省略不写。(1)[capture] :[]内为外部变量的传递方式,值、引用等,如下。(2)(parameters) :()内为形参,和普通函数的形参一样。*/ }:{}内为函数主体,和普通函数一样。及方便自己在函数内部定义函数。
2024-03-14 21:41:22 446
原创 C++ 类中static成员初始化
在C++中,你不能直接在类定义中初始化静态成员变量。你需要在类外部进行初始化。这是因为在类定义中,你只是声明了静态成员,而初始化涉及到存储分配,这通常在编译时不能决定。但是,这仍然是一个定义,而不仅仅是一个初始化。它告诉编译器这个定义应该在多个翻译单元中合并成一个。这与在类外部定义静态成员变量的效果相同,但是语法更简洁。
2024-03-14 20:12:54 355
原创 const成员函数 修改mutable修饰的值
register 用于定义寄存器变量,表示该变量被频繁使用,可以存储在CPU的寄存器中,以提高程序的运行效率。volatile 修饰符 volatile 告诉该变量的值可能会被程序以外的因素改变,如硬件或其他线程。static 用于定义静态变量,表示该变量的作用域仅限于当前文件或当前函数内,不会被其他文件或函数访问。// 定义变量 num,其值可能会在未知的时间被改变。// 定义指向常量的指针,指针所指的值不可修改。类型限定符提供了变量的额外信息,用于在定义变量或函数时改变它们的默认行为的关键字。
2024-03-14 18:38:13 367
原创 作用域解析运算符(Scope Resolution Operator)在C++中的用法和作用
【代码】作用域解析运算符(Scope Resolution Operator)在C++中的用法和作用。
2024-03-14 14:33:54 383
原创 C++ 类型转换 未解决
/ 常量转换,将const int转换为int。重新解释转换将一个数据类型的值重新解释为另一个数据类型的值,通常用于在不同的数据类型之间进行转换。静态转换通常用于比较类型相似的对象之间的转换,例如将 int 类型转换为 float 类型。常量转换用于将 const 类型的对象转换为非 const 类型的对象。C++ 中有四种类型转换:静态转换、动态转换、常量转换和重新解释转换。常量转换只能用于转换掉 const 属性,不能改变对象的类型。类型转换是将一个数据类型的值转换为另一种数据类型的值。
2024-03-14 13:34:12 350
原创 标准C库函数之perror()、strerror(),以及他们之间各种的优缺点(打印错误信息)
如果你需要处理错误消息,例如将其发送到特定的日志系统,或者创建定制的错误消息,那么strerror可能是更好的选择。总体而言,strerror函数和strerror_r函数用于获取描述错误的字符串,而perror函数用于报告错误消息。与strerror函数不同,GNU版本的strerror_r并不返回静态分配的字符串,而是将错误消息复制到提供的缓冲区中,并返回指向缓冲区的指针。在输出错误消息时,这个字符串将作为错误消息的前缀(也就是说,你可以手动的去描述这个错误是怎么发生的)。
2024-03-06 20:15:08 380
原创 函数指针 以及数据类型size_t(最大非负数)
size_t是无符号的长整型,其位宽不小于 16位,一般用来表示字节数的多少。常用于如sizeof返回值的类型。与int类型相比,主要的特点为:size_t是无符号的,int是有符号的。size_t是一种跟具体的平台有关联的类型,会具体调整其能表示的范围,因此其可移植性会更好。size_t能保证可以存储任何类型理论上可能的对象的最大值,包括数组类型。而int类型则只能保证16位或 32位的长度,且int为有符号的类型,其能存储的范围就更小了。
2024-03-05 23:38:03 354
原创 C语言中的宏函数与宏定义
C语言中的宏函数与宏定义从开始写C语言到生成执行程序的流程大致如下:预处理工作是系统引用预处理程序对源程序中的预处理部分做处理,而预处理部分是指以“#”开头的、放在函数之外的、一般放在源文件的前面的预处理命令,如:包括命令 #include,宏命令 #define 等,合理地利用预处理功能可以使得程序更加方便地阅读、修改、移植、调试等,也有利于模块化程序设计。宏定义是比较常用的预处理指令,即使用“标识符”来表示“替换列表”中的内容。标识符称为宏名,在预处理过程中,预处理器会把源程序中所有宏名,替
2024-03-04 22:53:37 937
原创 static 存储类
static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。全局声明的一个 static 变量或方法可以被任何函数或方法调用,只要这些方法出现在跟 static 变量或方法同一个文件中。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。实例中 count 作为全局变量可以在函数内使用,thingy 使用 static 修饰后,不会在每次调用时重置。静态变量在程序中只被初始化一次,即使函数被调用多次,该变量的值也不会重置。
2024-03-03 18:36:07 350
原创 printf() 函数支持变长参数列表
printf() 函数也支持变长参数列表,可以使用省略号 …来表示,用于指定要输出的多个值。在函数内部,可以使用 va_start() 和 va_end() 宏来访问变长参数列表中的值。
2024-03-03 15:30:09 332
原创 visual studio安装时候修改共享组件、工具和SDK路径方法
安装了VsStudio后,如果自己修改了Shared路径,当卸载旧版本,需要安装新版本时发现,之前的Shared路径无法进行修改,这就很坑爹了,因为我运行flutter程序的时候,报错找不到windows sdk的位置,所以我就怀疑是我手动修改了安装路径导致的,我就想着卸载重装应该可以解决。但是却遇到了路径无法修改的问题…计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\Setup。
2024-03-03 14:05:18 430
空空如也
为什么固定类型和格式的C语言被转化成机械指令的条数是固定的
2021-03-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人