- 博客(71)
- 收藏
- 关注
原创 C#之委托:delegate
delegate委托:将方法作为变量或参数进行传递,并以方法的形式进行执行;//带参数并且无返回值的委托public delegate void SayHelloFunc(string name);namespace CPlusLesson{ class Test01 { static void Main(string[] args) { //委托的声明:(注意:有参无返回值的委托对应有参无返回值的方法;——要相对应)
2022-03-27 14:25:38
3285
原创 Xmind使用技巧
新建图表根据需求:可新建为空白图表或模板图表:空白图:模板——提高工作效率其中因果分析(鱼普)图、SWOT分析、比较与对比、读书笔记等常用;(也可以新建空白图,改变鱼头的左右方向,相比就是样式没有模板的那么丰富;)Xmind快捷键:以下快捷键在窗口状态栏中都可找到相对应的功能;Tab:生成下一级子主题;Enter:生成同一级主题;———对应:上下左右键切换主题位置Alt+enter:给当前主题加标注;Del:删除主题;Ctrl+L:建立联系;——鼠标右键可以进入线条格式的编辑
2022-01-02 15:33:37
1566
原创 UE4中常用的C++关键字:override
override描述:override保留字表示当前函数重写了基类的虚函数。目的:1.在函数比较多的情况下可以提示读者某个函数重写了基类虚函数(表示这个虚函数是从基类继承,不是派生类自己定义的);2.强制编译器检查某个函数是否重写基类虚函数,如果没有则报错。用法:在类的成员函数参数列表后面添加该关键字既可。例子:class Base {virtual void f();};class Derived : public Base {void f() override; // 表示派生类重写基
2021-12-30 17:06:38
1507
原创 VS编译C++错误:
LNK2005 "class std::basic_string<char,struct std::char_traits,clasclass std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator<ch解决方法:项目右键 > 属性 > 配置属性 > 链接器 > 命令行 后加上:上一行 /FORCE:MULTIPLE 点击OK 就解决了;简单
2021-12-28 19:29:33
590
原创 C++习题二:职工管理系统:
职工管理系统1、管理系统需求职工管理系统可以用来管理公司内所有员工的信息本教程主要利用cpp来实现一个基于多态的职工管理系统公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责普通员工职责:完成经理交给的任务经理职责:完成老板交给的任务,并下发任务给员工老板职责:管理公司所有事务管理系统中需要实现的功能如下:退出管理程序:退出当前管理系统增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号显示职工
2021-12-15 10:30:41
1028
原创 STL(1):STL初识
STL的初识:STL的诞生:提高代码复用性:面向对象思想:面向对象三大特性——封装、继承、多态;泛型编程思想:模板–将类型参数化;STL基本概念:STL(Standard Template Library:标准模板库)STL六大组件:STL大体分为六大组件,分别是:容器、算法、迭代器、适配器(配接器)、空间配置器1.容器:各种数据结构,如:vector、list、deque、set、map等,用来存放数据;2.算法:各种常用的算法,如:sort、find、copy、for_e
2021-11-28 15:41:01
1071
原创 C++泛型编程:模板(2)---具体化模板、类模板
模板的局限性:模板的通用性不是万能的;(数组无法直接进行赋值操作;)C++为了解决这种问题,提供模板的重载,可以为这些特定的类型提供具体化的模板;class Person {public: Person(string name,int age) { this->m_name = name; this->m_age = age; } string m_name; int m_age;};//普通函数模板template<typename T>b
2021-11-24 23:24:45
729
1
原创 C++泛型编程:模板(1)-函数模板
模板模板的概念:模板就是建立通用的模具,大大提高复用性;模板的特点:1.不可以直接使用,它只是一个框架2.模板的通用并不是万能的;函数模板C++ 另一种编程思想称为 泛型编程,主要利用的技术就是模板;C++提供两种模板机制: 函数模板 和 类模板;函数模板语法:函数模板作用:建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表;语法:template < typename T>函数声明或定义解释:template
2021-11-23 17:38:26
866
1
原创 C++文件操作:
文件操作:程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放;通过文件可以将数据持久化;C++中对文件操作需要包含头文件< fstream >文件类型分为两种:1.文本文件:文件以文本的**ASCLL码形式存储在计算机中;2.二进制文件:文件以文本的二进制形式**存储在计算机中,用户一般不能直接读懂他们;操作文件的三大类:1.ofstream:写文件2.ifstream:读文件;3.fstream读写操作;文本文件:写文件:写文件步骤如下
2021-11-22 14:40:19
128
原创 C++多态(2):电脑案例
电脑组装案例#include<iostream>using namespace std;#include<string>//抽象不同零件类//抽象CPU类class CPU {public: //抽象的计算机函数; virtual void calculate() = 0;};//抽象显卡类class VideoCard {public: //抽象的计算机函数; virtual void display() = 0;};//抽象内存条类clas
2021-11-21 21:27:04
503
原创 C++多态:(1)纯虚函数和抽象类、虚析构
纯虚函数:使用抽象类的原因:在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容;纯虚函数语法: virtual 返回值类型 函数名 ( 参数列表 ) = 0;当类中有了纯虚函数,这个类也称为抽象类;抽象类的特点:无法实例化对象;子类必须重写抽象类中的纯虚函数,否则也属于抽象类,则无法实例化对象;class Base {public: virtual void funcPrint() = 0;};class Son :public Bas
2021-11-21 20:54:26
729
原创 C++程序经验:
编程过程中出现的错误:空指针异常:使用时注意指针是否指向希望指向的地方;防止空指针异常;例:CD案例中的错误:void CDPlayer::insertCD(CD *cd) { if (this->cdIn) { cout << "已有CD,请先取出CD;" << endl; }else{ cout <<"插入了"<< cd->getSonger() << "的CD....." << endl;
2021-11-18 19:16:35
510
原创 C++多态:(1)虚函数,案例1
多态的基本概念多态是C++面向对象三大特性之一;多态分为两大类:1.静态多态:函数重载 和 运算符重载属于静态多态,复用函数名;2.动态多态:派生类和弧函数实现运行时多态;(我们讲的多态多为动态多态)静态多态和动态多态区别:静态多态的函数地址早绑定 ——编译阶段确定函数地址;动态多态的函数地址晚绑定 ——运行阶段确定函数地址;class Animal {public: speak()就是虚函数 函数前面加上关键字virtual,变成虚函数,那么编译器在编译的时候就不能确定函数
2021-11-17 11:44:02
1078
原创 Maya快捷键、拆UV、上材质
常用快捷键:添加图形:空白处shift+右键–点击需要的添加的图形;给图形添加循环边,挤出,软/硬化边:点击图形shift+右键选择图形点,线,面或对象模式:直接鼠标右键;Alt+鼠标中间键:平行移动画布;alt+右键:旋转画布;alt+左键:拉近图形距离(放大)缩放:R;移动:W;——可根据坐标轴进行移动;旋转工具:E选择工具:Q隐藏:h;(要在对象模式下,再点击需要隐藏的物体)常用的几个工具:Q,W,E,R;注意:使用以上工具要按shift+右键:看是选中的是边,面,还是对象模
2021-11-15 14:27:59
4609
原创 C++继承:
继承是面向对象三大特性之一有些类与类之间存在特殊关系:例如:动物——(猫、狗…)———(加菲猫、波斯猫…哈士奇、京巴…)下级别的成员除了拥有上一级的共性,还有自己的特性;这时,我们就可以考虑利用继承的技术,减少重复代码;继承的基本语法:例如:好比我们平时看到的很多网站中,有公共的头部、公共的地步;而其他子页面只有重心内容不同;这时就可以利用普通写法和继承的写法来实现网页中的内容;继承的好处:减少重复代码;语法:class 子类 :继承方式 父类{ }子类 也称为 派生类;父
2021-11-10 12:04:12
162
原创 C++类和对象(4):运算符重载——=、==、()函数调用运算符
赋值运算符重载:注意第四点:C++编译器自动生成复制运算符operator=,对属性进行值拷贝;如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题;P1 = p2;重载赋值运算符的一个重要原因是在堆区开辟了存储空间;但是赋值的过程中只是进行了浅拷贝(并未再在堆区开辟空间),所以导致堆区的数据重复释放报错;int a=10,b = 20, c = 30;a = b = c;p1 = p2 = p3;为了解决上述问题,所以重载赋值运算函数要放回引用类型;...
2021-11-03 10:40:55
1040
原创 C++日期 & 时间:
C++ 标准库没有提供所谓的日期类型。C++ 继承了 C 语言用于日期和时间操作的结构和函数。为了使用日期和时间相关的函数和结构,需要在 C++ 程序中引用 头文件。有四个与时间相关的类型:clock_t、time_t、size_t 和 tm。类型 clock_t、size_t 和 time_t 能够把系统时间和日期表示为某种整数。结构类型 tm 把日期和时间以 C 结构的形式保存,tm 结构的定义如下:struct tm { int tm_sec; // 秒,正常范围从 0 到
2021-11-01 15:51:02
107
原创 C++中的String类与字符数组的常用函数
C/C++ 中定义的字符串的内存表示:C++ 编译器会在初始化数组时,自动把 \0 放在字符串的末尾。让我们尝试输出上面的字符串:#include <iostream>using namespace std; int main (){ char site[7] = {'R', 'U', 'N', 'O', 'O', 'B', '\0'}; cout << "字符串: "; cout << site << endl;
2021-11-01 15:22:11
460
原创 C++数据类型:
数据类型更名:typedef 声明可以使用 typedef 为一个已有的类型取一个新的名字。下面是使用 typedef 定义一个新类型的语法:typedef type newname; 例如,下面的语句会告诉编译器,feet 是 int 的另一个名称:typedef int feet;现在,下面的声明是完全合法的,它创建了一个整型变量 distance:feet distance;C++ 也允许定义各种其他类型的变量,比如枚举、指针、数组、引用、数据结构、类等等枚举类型enumera
2021-11-01 14:55:06
74
原创 C++中endl、ends和flush作用:
std::endl、std::ends、std::flush的区别头文件:#include <iostream>更准确的说,其实是位于头文件:#include <ostream>类型 描述endl——Insert newline and flush (刷新缓存区并插入换行符)ends——Insert null character (插入空字符)flush——Flush stream buffer (刷新流缓存区)可以看出,endl函数与flush的区别在于endl
2021-10-29 09:52:01
4979
原创 C++ 类的符号:和::的用法
符号:1.class 派生类名 :继承方式 基类名2.初始化列表的使用:Line::Line(Point xp1,Point yp2):p1(xp1),p2(yp2)//初始化列表方式{ cout<<"Line构造函数被调用!"<<endl; double x=double(p1.GetX()-p2.GetX()); double y=double(p1.GetY()-p2.GetY()); len=sqrt(x*x+y*y); }
2021-10-27 11:51:59
531
原创 C++习题一:算年龄差:
算年龄差:#include<iostream>#include <iomanip>using namespace std;#include<string>#define M 12//Data类;class Date {public: /* 默认构造函数,以fullyear的形式给出年月日,默认值为1990年1月1日,同时设置 日期分隔符为“-” */ Date(int year = 1990, int month = 1, int day = 1);
2021-10-27 10:37:08
353
原创 C++类和对象(4):运算符重载——+、<<、++
运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型;加号运算符重载作用:实现两个自定义数据类型相加的运算;这时需要定义成员函数重载+号或全局函数重载+号:定义成员函数重载+号class Person{public: 1.成员函数重载+号 Person operator+(Person &p) { Person temp; temp.m_A = this->m_A + p.m_A; temp.m_B = this->m_B
2021-10-23 16:46:11
281
原创 C++类和对象(4):友元
在程序里,有些私有属性,也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术;友元的目的就是让一个函数或者类访问另一个类中私有成员;友元的关键字为 friend友元的三种实现:全局函数做友元类做友元成员函数做友元全局函数做友元:——即全局函数中可以访问类中的私有成员class Building{//goodGay全局函数是 Building 的好朋友,可以访问Building中的私有成员;friend void goodGay(Building &building)
2021-10-23 14:41:46
113
原创 C++类和对象(3):C++对象模型和this指针、链式编程、const常对象/常函数
成员变量和成员函数分开存储:在C++中,类内的成员变量和成员函数分开存储;只有非静态成员变量才属于类的对象上;注:空对象占用内存空间为:1;class Person{public: Person() { m_B = 0; } //静态成员变量不占对象空间 static int m_A; //非非静态成员变量占对象空间 int m_B; //函数也不占对象空间,所有函数共享一个函数实例; void func() { } //静态成员函数也不占对象空间 static v
2021-10-23 11:07:57
145
原创 JS零散知识汇总(一)
JS零散知识汇总解决函数中this指向的问题:1.如果回调函数中使用this,并且父级对象中的this指向需要的对象,这时我们可以考虑使用箭头函数;箭头函数:箭头函数本身是没有this和arguments的,在箭头函数中引用this实际上是调用的是定义时的上一层作用域的this。这里强调的是上一层作用域,是因为对象是不能形成独立的作用域的。2.如果父级中的this指向对象并不是我们所需的对象,则可以使用that来赋值重新调用this指向; mounted: function(){
2021-10-23 09:47:52
69
原创 C++经典算法1
冒泡排序总结规律:1.排序总轮数 = 元素个数 - 1;2.每轮对比次数 = 元素个数 - 排序轮数 -1;int main() { int arr[5]; int arrLength = sizeof(arr) / sizeof(arr[0]); for (int i = 0; i < arrLength; i++) { cin >> arr[i]; } //冒泡排序开始 //总共排序轮数为 元素个数 - 1 for (int i = 0; i < ar
2021-10-23 09:46:13
74
原创 C++常用函数
rand( )函数系统生成随机数:rand()*100生成0-99的随机数;所以rand()*100 + 1则是生成1-100的随机数;int num = rand()*100 + 1; //生成1-100的随机数srand( )函数用于添加随机数种子;作用:利用当前系统时间生成随机数,防止每次随机数都一样;//time系统时间头文件包含#include<ctime>//利用当前系统时间生成随机数,防止每次随机数都一样srand((unsigned int)tim
2021-10-23 09:45:40
164
原创 C++类和对象(3):类对象作为类成员/静态成员
类对象作为类成员:C++类中的成员可以是另一个类的对象,我们成改成员为 对象成员;例如:class A { }class B { A a;}B类中有对象A作为成员,A为成员对象;那么当创建B对象时,A与B 的构造和析构的顺序是谁先谁后?//手机类class Phone{public: Phone(string x_p_name) { p_name = x_p_name; } string p_name;};//人class Person{pub
2021-10-22 14:20:49
322
原创 C++中this指针解读:
this指针:在每个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this;它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址;例如:当调用成员函数a.volume时,编译系统就把对象a的起始地址赋给this指针,于是成员函数引用成员数据时,就要按照this的指向找到对象a的数据成员;例如:volume函数要计算heightwidthlength的值;实际上是执行(this->height)(this->width)(this->leng
2021-10-22 11:46:52
619
原创 VS调试断点:
普通断点断点调试都要在debug模式下,release版本中是直接跳过断点的断点快捷键:F9插入断点;再次按F9是删除断点;==Ctrl+F9:禁用断点 ==Ctrl+Shift+F9-删除所有断点F5:调试快捷键;Shift+F5:停止调试;F11:进入函数体中;————逐渐深入Shift+F11:跳出函数体;F10:一行一行调试;————常用如果在调试过程中,按F10调试速度过快,按错了;则可以通过鼠标左键,移动下图中的黄色箭头重新调整调试点
2021-10-22 11:14:42
2409
原创 动态内存分配、malloc与new的区别
理解内存知识:一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack)— 由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束 时可能由OS回收 。分配方式类似于链表。3、全局区(静态区)(static)—存放全局变量、静态数据、常量。程序结束后由系统释放。4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放。5、程序代
2021-10-17 14:21:51
464
原创 C++类和对象(2):构造函数和析构函数、构造函数初始化列表
注意:1.类的属性可以是另一个类;(定义类时注意)2.实现成员函数中:要使用“::”作用域符号,这样才能定义/实现成员函数,否则会报错;3.在实现函数.cpp和main.cpp中都要包含.h头文件,如果一个头文件中使用另一个类,也需要引用对应的头文件对象的初始化和清理构造函数和析构函数C++提供了构造函数和析构函数完成对象初始化和清理工作;对象的初始化和清理工作是编译器强制要我们做的事情,因此如果我们不提供构造和析构函数,编译器会提供;但是**编译器提供的构造函数和析构函数时空实现的
2021-10-16 17:49:55
298
原创 C++类和对象(1):封装--权限用法(private/public/protected)、class与struct的区别
C++面向对象的三大特性为:封装、继承、多态;C++认为万事万物皆为对象,对象上有其属性和行为;封装——C++面向对象三大特性之一;封装意义:将属性和行为作为一个整体,表现生活中的事物;将属性和行为加以权限控制;...
2021-10-16 16:10:18
364
原创 C++中将string转为数组:
第一种:(利用指针进行操作)因为string可以看作是数组构成的串,所以直接定义一个char的指针,指过去就可以了。示例如下:int main() { string s1; cout<<"Please input a string:"; cin >> s1; const char * k = NULL; k = s1.c_str(); //让指针指向s1的位置 cout << k[0] << endl; for (int i = 0
2021-10-16 11:26:07
23739
原创 cin、cin.getline、cin.get、cin.ignore
1.cincin>>只读取第一个非空白字符,使用cin>>读入时,它将忽略前面的所有空格,不能实现按任意键继续的功能。2.cin.getcin.get读取输入中的第一个字符,包括空格、Tab、Enter。用>>读入,使用cin>>读入时,它将忽略前面的所有空格,不能实现按任意键继续的功能。在程序设计中,会遇到要读取一个字符的情况,如,系统提示按任意键继续。这时则可使用cin.get(),cin.get读取输入中的第一个字符,包括空格、Tab、E
2021-10-16 10:53:03
923
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人