jn10010537
2024年,C#/C++
展开
-
【CPP知识】typedef数据类型重定义
3.1 、简化类型申明,比如原来的数据类型long double,可以更见简化成my_float;int x;int y;int z;} sample;// 使用typedef简化了类型 sample s1 = {// 以下是不使用typedef则显得复杂。int y;int z;} s2 = {3.2、简化函数申明,time_t time(time_t *);原创 2023-02-12 23:47:58 · 1769 阅读 · 0 评论 -
【CPP知识】try-catch处理内存分配失败的异常
利用try-catch模块函数,将内存分配语句放在try中,这样出现了异常就会立刻获得,从而转入匹配的catch块进行处理。new和delete通常需要成对使用,即开发者需要及时的释放内存,否则很容易内存泄漏。一般当分配较大块内存时,需要配合进行内存分配失败的异常处理。在try语句块中如果throw出异常之后,那么try语句块后续代码将不再执行。在try语句块中如果throw出异常之后,那么try语句块后续代码将不再执行。那么遇到内存申请空间不够的情况下就该使用try-catch抛出异常。...原创 2022-07-31 15:04:21 · 1141 阅读 · 0 评论 -
【CPP知识】常对象与常对象指针
常函数class类里面成员函数后加const修饰,我们称为这个函数为常函数。常对象、常对象指针即const在对象以及对象指针前修饰。常成员变量class类里面,const在成员变量前修饰。常对象、常对象指针可以修改mutable修饰的成员变量!几个相似的名词常对象、常对象指针、常函数、常成员变量。常对象、常对象指针只能调用常函数、不能调用普通成员函数!常对象、常对象指针不能修改成员函数的值,但是可以访问!常对象也叫常量对象,常对象指针也叫常量对象指针。注意对象是class类的实例化。...原创 2022-07-28 22:56:37 · 325 阅读 · 0 评论 -
【C++】3-1.23 c++关于&运算符的理解
&运算符,简记:左引用,右地址,夹在中间是位与。原创 2022-07-17 10:19:47 · 1497 阅读 · 0 评论 -
【C++】part3-关于引用的理解
因为引用是别名,即函数引用变量还是普通变量)。这个理解好比在一个小范围给他取了这个外号,就不要再另一个人也取这个外号,否则程序会区分不开!引用变量的值就是指针地址,具体指的是被引用变量的地址,可以看成指向个数据类型的指针常量。引用即指的是变量的引用,还是一个变量,以下为了区分,将其变个说法,叫"引用变量"。引用变量b的值就是a的地址,对b的处理等同于对a的处理!在被调函数中改变引用变量的值,则改变的是实参的值。但是,对外表现出来的却不是变量b是a的地址!引用的定义引用就是另一个变量的别名。......原创 2022-07-17 09:57:22 · 97 阅读 · 0 评论 -
【C++】5-1.13 实现栈Stack的class类
【C++】5-1.13 实现栈Stack的class类1、栈Stack2、实现stack类1、栈Stack栈:一种后进先出的数据结构;关于栈的函数调用:函数调用时,首先需要传递参数给被调用函数,这些参数先由编译器先存储进栈;进入被调用函数后,函数里面的局部变量,也由编译器在栈中创建相应的存储;函数返回时,局部变量出栈、参数出栈;2、实现stack类stack类封装了栈的数据成员并提供了操作栈的函数接口,如下图:...原创 2021-05-24 22:14:50 · 430 阅读 · 8 评论 -
【C++】5-1.12 c++14的字符串字面量
【C++】5-1.12 c++14字符串字面量C++11 原始 字符串字面量C++14 字符串字面量C++11 原始 字符串字面量C++11引入了Raw String literals;翻译过来为“原始”字符串字面量 或 “生”字符串字面量;语法:// 两个相同的分隔符中间通过括号插入原始字符,同时最左侧有字符R标志!//delimiter是分隔符//raw_characters原始字符 R "delimiter( raw_characters )delimiter"示例:#inc原创 2021-05-23 22:21:13 · 970 阅读 · 9 评论 -
【C++】5-1.11 c++11的向量类std::vector
【C++】5-1.11 c++11的向量类std::vector1、vector类与array类2、vector类使用方法3、使用示例1、vector类与array类关于c++11引入的array类,参考如下博客:【C++】4-1.25 C++11的数组类std::arrayhttps://blog.csdn.net/jn10010537/article/details/116669492std::array数组对象,它的大小在编译阶段就确定了,容量大小不可变;std::vector向量对象,它原创 2021-05-23 19:52:50 · 775 阅读 · 2 评论 -
【C++】5-1.10 深浅拷贝
这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-05-23 12:15:27 · 159 阅读 · 0 评论 -
【C++】5-1.9 拷贝构造函数
【C++】5-1.9 拷贝构造函数拷贝构造隐式声明的拷贝构造函数声明拷贝构造函数调用拷贝构造函数示例拷贝构造拷贝构造:用一个对象初始化另一个同class类的对象;拷贝构造函数是一种特殊的构造函数,它用于:根据已有的对象,创建另一个同class的对象;拷贝构造函数可以简写为 copy ctor;隐式声明的拷贝构造函数隐式声明的拷贝构造函数 Implicitly-declared Copy Constructor,不要翻译成默认拷贝构造函数!一般情况下,如果程序员不编写拷贝构造函数,那么编译器会自原创 2021-05-20 13:25:12 · 361 阅读 · 4 评论 -
【C++】5-1.8 友元
【C++】5-1.8 友元1、友元2、为何需要友元3、示例1、友元友元是一种定义在类外部的普通函数或类,但它需要在class类里进行声明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是它可以访问类中的私有(private)成员和保护(protected)成员。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元;2、为何需要友元私有成员无法从类外访问,但可以给可信的函数和类授权(即变成原创 2021-05-18 23:26:01 · 250 阅读 · 1 评论 -
【C++】5-1.7 析构函数
【C++】5-1.7 析构函数1、析构函数2、析构函数与构造函数对比3、示例1、析构函数析构函数与构造函数正好相反。构造函数是class创建对象时,自动调用;析构函数是删除class创建的对象时,自动调用,也可以显示的调用。析构函数具有如下特点:析构函数也和类名相同,需要在前面加上“~”,与构造函数区分;当程序员没有显示的声明时,编译器回生成默认析构函数;析构、构造函数都不能有返回值,但是构造函数可以被重载;当对象被撤销时析构函数自动调用,与构造函数不同的是,析构函数可以被显示调用,以释放原创 2021-05-17 23:36:24 · 340 阅读 · 2 评论 -
【C++】5-1.6 实例成员与静态成员
【C++】5-1.6 实例成员与静态成员示例成员静态成员三级目录示例成员静态成员三级目录原创 2021-05-16 23:00:26 · 246 阅读 · 0 评论 -
【C++】5-1.5 不可变对象和类
【C++】5-1.5 不可变对象和类不可变对象不可变类三级目录不可变对象不可变对象:对象创建后,其内容不可改变,除非通过成员拷贝不可变类不可变类:不可变对象所属的类三级目录原创 2021-05-16 11:51:19 · 504 阅读 · 0 评论 -
【C++】5-1.4 委托构造或代理构造
【C++】5-1.4 委托构造或代理构造1、委托构造2、示例1、委托构造委托构造又称为代理构造。委托构造:一个构造函数可以调用另外的构造函数;注意:委托构造需避免递归调用目标ctor。递归调用是函数调用其本身,即要避免目标构造函数循环调用自己,比如:A() ----> A(int) ----> A(int, int)---->A() ;2、示例2.1、委托构造的正确示例:#include <iostream>class A {public:原创 2021-05-14 22:52:11 · 450 阅读 · 0 评论 -
【C++】5-1.3 声明与定义
这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-05-14 19:23:35 · 1137 阅读 · 0 评论 -
【C++】5-1.2 断言assert与static_assert
assert and【C++】5-1.2 断言assert与static_assert断言assertstatic_assert使用断言断言断言是一条检测假设成立与否的语句。如果断言的语句为True就pass通过,程序不会报错。如果断言的语句为False就抛出异常,中断程序!assertassert 是C语言的宏(Macro),运行时检测假设成立与否的语句。用法:包含头文件 ;且程序要以debug调试模式编译程序;使用示例如下:std::array a{ 1, 2, 3 }; /原创 2021-05-13 23:12:15 · 455 阅读 · 0 评论 -
【C++】5-1.1 常量表达式涉及的const与constexpr关键字
【C++】5-1.1 常量表达式涉及的const与constexpr关键字常量表达式const关键字C++11的constexpr 关键字const与constexpr区别常量表达式常量表达式是编译期可以计算值的一个表达式;常量表达式有一个好处:在编译阶段计算值可以实现代码运行性能的优化提升;比如:在c++中,不管是原生数组还是std::array数组,C++ 数组的大小要求是编译期的一个常量。以下示例编译运行正确:#include<iostream>#include<arr原创 2021-05-13 00:27:38 · 229 阅读 · 1 评论 -
【C++】4-1.25 C++11的数组类std::array
【C++】4-1.25 C++11的数组类std::arrayC风格数组C++风格数组std::array创建C++风格数组数组类std::array的成员函数使用示例C风格数组C风格的数组又叫C++原生数组#include <iostream>int main(){ int arr[6]{ 1,2,3,4,5,6 }; return 0;}注意:C风格的数组可能存在的问题:1,可能会退化为指针,如下示例:#include <iostream>void原创 2021-05-12 08:07:39 · 900 阅读 · 0 评论 -
【C++】4-1.24 插入和替换字符串
【C++】4-1.24 插入和替换字符串1.插入字符串insert函数2.替换字符串replace函数三级目录1.插入字符串insert函数操作string对象中的字符串内容的函数,有时用到一个参数:“index”;有时接受两个数字参数: index, n;其中index: 从index号位置开始其中n: 之后的n个字符insert() 函数: 将某个字符/字符串插入到当前字符串的某个位置;2.替换字符串replace函数三级目录...原创 2021-05-11 19:52:28 · 261 阅读 · 0 评论 -
【C++】4-1.23 获取子字符串
【C++】4-1.23 获取子字符串1.获取子字符串2.示例1.获取子字符串字符串的at() 函数用于获取一个单独的字符;而获取字符串的子字符串使用substr() 函数;语法1:str1.substr(index, num)// 从字符串str1的index索引位置开始获取num个字符;语法2:str1.substr(index)// 从字符串str1的index索引位置开始获取,一直获取到末尾的字符;2.示例示例 str1.substr(index, num)#include原创 2021-05-11 07:52:35 · 1036 阅读 · 0 评论 -
【C++】4-1.22 搜索字符串
【C++】4-1.22 搜索字符串1.搜索字符串2.示例1.搜索字符串find() 函数可以在一个字符串中搜索一个子串或者一个字符以下str1、str2表示字符串,char表示单个字符;语法1:str1.find(str2)//返回str1中出现str2的第一个索引位置语法2:str1.find(str2, index)//从str1的index索引号位置开始查找str2出现的第一个索引位置语法3:str1.find(char)//返回str1中出现单个字符char的第一个索引位原创 2021-05-11 07:40:57 · 756 阅读 · 1 评论 -
【C++】4-1.21 字符串at, clear, erase, and empty函数
【C++】4-1.21 获取子串一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-05-11 00:28:00 · 1567 阅读 · 1 评论 -
【C++】4-1.20 给字符串赋值
【C++】4-1.20 给字符串赋值一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-05-10 23:25:50 · 3993 阅读 · 3 评论 -
【C++】4-1.19 字符串比较
【C++】4-1.19 字符串比较1.字符串比较2.示例代码1.字符串比较字符串比较(comparing strings)用到的是string字符串类里的compare函数;compare() 函数用于比较两个字符串,它与C语言中的 strcmp() 函数很像。下面的代码在windows操作系统下运行IDE:vs2017 社区版,c++语言标准:ISO C++14语法1:str1.compare(str2)//str1与str2进行比较;// 当str1字符大于str2,返回1;//原创 2021-05-10 22:58:27 · 369 阅读 · 0 评论 -
【C++】4-1.18 string 追加字符串
【C++】4-1.18 string 追加字符串1.追加字符串2.示例1.追加字符串将字符串内容附加到一个字符串中2.示例2.1 append(字符串)追加字符串;#include<iostream>#include<string>int main(){ std::string s1{ "hello-" }; s1.append("jn10010537!"); std::cout <<"[1]s1="<< s1 << s原创 2021-04-30 19:44:15 · 4935 阅读 · 1 评论 -
【C++】4-1.17 string 字符串运算符
Appending a String (追加字符串)这里写目录标题一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-04-30 18:56:55 · 1468 阅读 · 0 评论 -
【C++】4-1.16 创建 string 对象
【C++】4-1.16 创建 string 对象1.用无参构造函数创建一个空字串2.用字符串常量或字符串数组创建string对象1.用无参构造函数创建一个空字串示例:#include <iostream>#include <string>int main(){ std::string S1; //用无参构造函数创建一个空字符串; S1 = "jn10010537"; //赋值 std::cout << S1 << std::endl;原创 2021-04-29 22:04:34 · 1124 阅读 · 0 评论 -
【C++】4-1.15 class成员的初始化次序
【C++】4-1.15 class成员的初始化次序背景初始化class成员class成员的初始化次序示例背景为了class成员有一个初值,可以在构造函数体中为成员赋值(这是赋值不是初始化):即先在class中声明数据成员,然后在构造函数体中为成员赋值;如下示例:class Square{public: Square(){ side = 1.0; //2.在构造函数体中为成员赋值 }private: double side; //1.声明数据成员};int main(){原创 2021-04-28 22:42:55 · 415 阅读 · 2 评论 -
【C++】4-1.14 class默认构造函数
【C++】4-1.14 class默认构造函数1.默认构造函数2.使用场景3.使用示例1.默认构造函数默认构造函数是可以无参调用的构造函数;默认构造函数可以是定义为空参数列表的构造函数,也可以是所有参数都有默认参数值的构造函数;2.使用场景默认构造函数主要是针对“内嵌对象成员”,即对象类型成员。若内嵌对象成员没有被程序员通过代码显式初始化,该内嵌对象的无参构造函数会被自动调用;若内嵌对象没有无参构造函数,则编译器报错!注意:若类的数据域是一个内嵌对象类型(且它没有无参构造函数),则该内嵌对象原创 2021-04-28 06:53:47 · 900 阅读 · 0 评论 -
【C++】4-1.13 class构造函数初始化列表
【C++】4-1.13 class构造函数初始化列表背景二级目录三级目录背景为什么需要构造函数初始化列表?如果class类的数据域是一个对象类型,被称为内嵌对象(即对象中的对象);而内嵌对象必须在被嵌对象的构造函数体执行前就构造完成,那么就需要构造函数初始化列表;如下:二级目录三级目录...原创 2021-04-27 12:46:50 · 840 阅读 · 0 评论 -
【C++】4-1.12 class数据成员的就地初始化
【C++】4-1.12 class类成员的就地初始化c++03标准c++11标准示例c++03标准c++03标准的类成员就地初始化:在C++03标准中,只有静态常量整型成员才能在类中就地初始化;#include <iostream>#include <string>using namespace std;class X { // 对于c++03标准 // 只有 静态 常量 整型 成员才能在类中就地初始化; static const int a = 7;原创 2021-04-26 23:29:46 · 343 阅读 · 0 评论 -
【C++】4-1.11 class类的数据成员与this指针
【【C++】4-1.11 class类的数据成员与this指针1.数据成员的作用域2.数据成员被同名屏蔽3.this 指针1.数据成员的作用域1.1、数据成员可以被class类内所有的函数访问,即数据成员对于成员函数,相当于全局变量;1.2、数据域与成员函数可按任意顺序声明;如下示例1,2,3的声明方式效果一致:声明方式,示例1class Square{public: Square(); Square(double); double getArea(); double getSid原创 2021-04-18 19:10:28 · 372 阅读 · 1 评论 -
【C++】4-1.10 c++类的抽象和封装
【C++】4-1.10 c++类的抽象和封装1.抽象2.封装1.抽象1.1 关于抽象的解释在研究对象和系统时,为了更加专注于感兴趣的细节,去除对象或系统的物理或时空的细节、属性的过程,就是抽象;简而言之:抽象就是提炼目标系统中我们关心的核心要素的过程;比如对于矩形,我们关心的是边长,面积,我们进行抽象的时候就只关心这两个要素;2.封装封装指的是数据域的封装,什么是封装,为什么要封装数据,怎么封装?2.1 什么是封装下面从两个维度来解释:一种实现数据和函数绑定的语言构造块,即class类,原创 2021-04-18 13:00:23 · 214 阅读 · 0 评论 -
【C++】4-1.9 c++对象与函数
【C++】4-1.9 c++对象作为函数参数一级目录二级目录三级目录一级目录对象作为函数参数,可以按值传递也可以按引用传递;二级目录三级目录原创 2021-04-17 18:40:49 · 190 阅读 · 0 评论 -
【C++】4-1.8 c++对象数组
【C++】4-1.8 c++对象数组对象指针和对象数组对象数组的声明方式三级目录对象指针和对象数组对象数组区别与对象指针,对象指针是指向一个对象的地址,而对象数组即数组指针,指向含有对象的数组的地址;对象指针,详见博客:c++对象指针和动态对象https://blog.csdn.net/jn10010537/article/details/115701149对象数组的声明方式三级目录...原创 2021-04-17 15:02:33 · 230 阅读 · 0 评论 -
【C++】4-1.7 c++对象指针和动态对象
【C++】4-1.7 c++对象指针和动态对象1.对象指针2.访问对象成员3.创建动态对象4.示例1.对象指针对象指针:指向对象的指针;可以用对象指针访问对象成员;2.访问对象成员使用对象指针访问对象成员的方法:-2.1、使用指针的解引用,然后使用dot(.)点运算符访问成员;-2.2、使用指针加箭头(->)运算符访问对象成员3.创建动态对象在函数中声明的对象都是在栈上创建的,函数返回则对象被销毁;这个对象是由编译器去申请和释放内存的;可以认为与程序员无关,由编译器自动管理内存!原创 2021-04-14 18:32:55 · 264 阅读 · 0 评论 -
【C++】4-1.6 c++避免头文件被多次包含
【C++】4-1.6 c++避免头文件被多次包含1.避免头文件被多次包含2.使用示例1.避免头文件被多次包含避免头文件被多次包含有3种方法:-1.1、最传统的方法;预处理指令,告诉编译器什么条件包含头文件去编译;适用性强,在所有的c++编译器都能通过;#ifndef MY_HEADER_FILE_H#define MY_HEADER_FILE_H#endif//例如:#ifndef Square_H#define Square_H#endif-1.2、 #pragma on原创 2021-04-14 15:54:15 · 246 阅读 · 0 评论 -
【C++】4-1.5 c++将声明与实现分离
【C++】4-1.5 c++将声明与实现分离函数,声明和实现分离类,声明和实现分离内联声明与内联函数函数,声明和实现分离函数实现声明、实现的分离的方式:将函数的原型放到头文件中;将函数的实现(定义)放到源文件中;在另外的文件中去调用函数。如下:头文件GetArea.h#pragma once// 把函数的原型放到头文件GetArea.h中float getArea(float radius);源文件GetArea.cpp// 函数的实现(定义)放到源文件GetArea.cpp中;#in原创 2021-04-14 14:08:05 · 1601 阅读 · 0 评论 -
【C++】4-1.4 c++匿名对象
【C++】4-1.4 c++匿名对象一级目录二级目录三级目录一级目录二级目录三级目录原创 2021-04-13 10:58:38 · 918 阅读 · 0 评论