自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(200)
  • 收藏
  • 关注

原创 运算符重载(operator overloading)

运算符重载(operator overloading) 运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。 在C++中,可以定义一个处理类的新运算符。这种定义很像一个普通的函数定义,只是函数的名字由关键字 operator 及其紧跟的运算符组成,差别仅此而已。它像任何其他函数一样也是一个函数,当编译器遇到适当的模式时,就会调用这个函数。1. 加号运算符重载 如果想让自定义数据类型 进行+运算 需要重载 + 运算符 在成员...

2022-03-18 00:23:03 1702

原创 Visual Studio中注释代码

注释代码:Ctrl+K+C取消注释:Ctrl+K+U

2022-03-13 21:18:41 956

原创 强化封装——数组类封装

强化封装——数组类封装MyArray.hclass MyArray {public: MyArray();//默认构造,默认100容量 MyArray(int capacity); MyArray(const MyArray& array);//拷贝 ~MyArray();//拷贝 void push_Back(int val);//尾插法 int getData(int index);//根据索引获取值 void setDat...

2022-03-13 17:35:28 188

原创 友元函数(friend)

全局函数 做 友元函数 类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部(作用域之外)访问。但是,有时候需要在类的外部访问类的私有成员,怎么办? 解决方法是使用友元函数,友元函数是一种特权函数,C++允许这个特权函数访问私有成员,。 程序员可以把一个全局函数、某个类中的成员函数、甚至整个类声明为友元。 让全局的好基友函数 变为 我的好朋友 友元函数 友元函数 目的:访问类中的私有成员属性 全局函数做友元函数 ...

2022-03-10 22:46:00 3360

原创 常函数与常对象

常函数与常对象 常函数 void func() const {} 常函数 修饰是 this 指针 const Type* const this 常含数 不能修改 this 指针指向的值 常对象 在对象前 加入 const 修饰 const Person p1 常对象 不可以调用普通的成员函数 常对象 可以调用常含数 class Person {public: Person() { /* ...

2022-03-10 18:51:41 186

原创 空指针访问成员函数

空指针访问成员函数 若成员函数没有用到 this ,那么空指针可以直接访问 如果成员函数用到 this 指针,就要注意, 可以加if判断,如果 this 为空就 returnclass Person0007 {public: void show() { cout << "Person show." << endl; } void showAge() { if (this == NULL) { ...

2022-03-10 13:13:30 119

原创 this指针基本使用

C++面向对象模型初探this指针基本使用 C++的数据和操作也是分开存储,并且每一个非内联函数(non-inline member function)只会诞生一份函数实例,也就是说多个同类型的对象会公用一块代码。 一块代码是如何区分哪个对象调用自己的呢? C++通过提供特殊的对象指针,this指针,解决上述问题。this指针指向被调用的成员函数所属的对象。 C++规定,this是隐含在对象函数内的一种指针。当一个对象被创建后,它的每一个成员函数都含有一个系统自动生成的...

2022-03-10 13:00:39 592

原创 成员变量和成员函数分开处理

C++面向对象模型初探成员变量和成员属性分开处理C++实现了“封装”,那么数据(成员属性)和操作(成员函数)是什么样呢?“数据”和“处理数据的操作(函数)”是分开存储的。 1. C++中的非静态数据成员直接内涵在类对象中,就像 C struct一样。 2. 成员函数(member function)虽然内涵在class声明之内,却不出现在对象中。 3. 每一个非内联成员函数(non-inline member function)只会诞生一份函数实例。空类的大小为 1...

2022-03-10 11:06:20 90

原创 静态成员变量 和 静态成员函数

静态成员变量 和 静态成员函数静态成员变量 编译阶段分配内存 所有对象共享数据 通过对象访问、通过类名访问 有权限控制 类内声明、类外初始化 在一个类中,若将一个成员变量声明为static,这种成员称为静态成员变量。与一般的数据成员不同,无论建立多少个对象,都只有一个静态数据的拷贝,静态成员变量,属于某个类,所有对象共享。 静态变量,是在编译阶段分配空间,对象还没有创建时,就已经分配空间。 静态成员变量必须在类中声明,在类外定义。...

2022-03-06 23:29:32 315

原创 动态对象创建

动态对象创建C语言中malloc和free的问题: 1. 程序员必须确定对象的长度; 2. malloc 返回一个 void*指针,C++不允许将 void*赋值给其他任何指针, 故必须强转; 3. malloc 可能申请内存失败, 所以必须判断返回值来确保内存分配成功; 4. 用户在使用对象之前必须记住对他初始化, 构造函数不能显示调用初始化(构造函数是由编译器调用), 用户有可能忘记调用初始化函数。new operator new 会返回一个该...

2022-03-06 20:11:44 648

原创 explicit关键字作用

explicit关键字作用 作用:防止构造函数中的隐式类型转换class MyString {public: MyString(const char* str) { } explicit MyString(int a) { mSize = a; } char* mStr; int mSize;};void test006() { MyString str = "abc"; //隐式类型转换 MyStr...

2022-03-06 18:18:48 57

原创 类对象作为类成员的案例

类对象作为类成员的案例 类对象作为类成员, 构造顺序先将类对象一一构造,然后构造自己; 析构顺序与构造的顺序相反,先析构自己,再析构对象。class Phone {public: Phone() { cout << "Phone's default constructor." << endl; } Phone(string name) { m_PhoneName = name; cout << "Phone's par...

2022-03-06 17:55:53 72

原创 初始化列表

初始化列表 初始化列表语法在构造函数后面 + :属性(值、参数),属性(值、参数)class Person005 {public: /*Person005() { }*/ //有参初始化数据 /*Person005(int a, int b, int c) { m_A = a; m_B = b; m_C = c; }*/ Person005() :m_A(10), m_B(20), m...

2022-03-06 17:15:31 133

原创 深拷贝与浅拷贝

深拷贝与浅拷贝“Person05::Person05(char *,int)”: 无法将参数 1 从“const char [5]”转换为“char *” Project1 解决方法:右键项目 -> 属性 -> C/C++ -> 语言 -> 符合模式改成“否”浅拷贝:系统默认提供的拷贝构造,做简单的值拷贝; 如果属性里有指向堆空间的数据,那么简单的浅拷贝会导致重复释放内存的异常。 解决该问题,需要自己提供拷贝构造函数,进行深拷贝。 深拷...

2022-03-06 16:59:45 344

原创 对象的构造和析构

对象的构造和析构1. 对象的初始化和清理 构造函数 和 析构函数 被编译器自动调用完成对象初始化和对象清理工作。2. 构造函数 和 析构函数 构造函数写法与类名相同,没有返回值,不写void(可以有参数) 可以发生重载构造函数由编译器自动调用,而不是手动,且只调用一次。 析构函数写法与~类名相同 类名前面加一个符号“~” 也没有返回值,不写void 不可以有参数(不能)自动调用 只会调用一次 如果没有提供构造和析构,系统会默认提供...

2022-03-06 15:31:36 540

原创 面向对象设计案例

面向对象设计案例1. 设计立方体类 求立方体面积和体积,分别用全局函数和成员函数判断两个立方体是否相等。 class Cube {public: void setL(int l) { m_L = l; } int getL() { return m_L; } int cGetL() const{ return m_L; } void setW(int w) { ...

2022-03-04 18:16:19 1058 1

原创 封装(C++)

C语言下的封装 和 C++的封装 区别C语言封装 属性和行为分开处理 类型检测不够struct Person { char mName[64]; int mAge;};void PersonEat(struct Person* p) { printf("%s 在吃饭。\n",p->mName);}struct Dog { char mName[64]; int mAge;};void DogEat(struct D...

2022-03-02 12:33:17 355

原创 extern C浅析

extern C浅析 1个无法解析的外部命令:意思是链接时链接不到外部函数或方法 在C++中函数可以发生重载,编译器会把函数名称统统改变 C++中想调用C语言方法:1.extern "C" void show();//show()方法按C语言方式做连接 2.#ifdef __cplusplus//两个下划线_extern "C"{ extern "C"#endif//!__cplusplus#include <stdio...

2022-03-01 23:10:27 487

原创 函数重载(overload)

函数重载(overload)1. 函数重载的语法 C++中 函数名称可以重复 必须在同一个作用域 函数的参数 个数、类型或顺序 不同//overloadvoid func() { cout << "func()" << endl;}void func(int a) { cout << "func(int a)" << endl;}void func(double a) { cout ...

2022-03-01 22:47:29 881

原创 函数的默认参数及占位参数

函数的默认参数及占位参数函数的默认参数参数后面=... 参数可以有默认值void func(int a = 10, int b = 10) { cout << "a+b=" << a + b << endl;}void test21() { func();}函数参数注意事项: 如果有一个位置有了默认参数,那么从这个位置开始,从左往右都必须有默认参数。 传入参数,如果有参数用传入参数,没有...

2022-03-01 21:42:38 404

原创 内联函数——解决宏缺陷问题

内联函数 目的:代替宏函数的 内联函数的引出——宏函数的缺陷 宏函数的缺陷case 1://定义一个加法#define MyAdd(x,y) ((x)+(y))void test18() { int ret = MyAdd(10, 20) * 20;//预期600,实际是410,加括号可以处理 cout << ret << endl;}case 2:#define MyCompare(a,b) ((a)...

2022-03-01 21:20:01 153

原创 两个类的简单案例

1.设计圆类//1.设计一个类,求圆的周长const double pi = 3.14;//周长公式: 2*pi*rclass Circle {//class代表一个类 后面是类名public://公共权限 double calculate() {//成员函数 return 2 * pi * m_R; } //成员函数可以修改 成员属性 void setR(int r) {//半径的成员方法 m_R = r; }...

2022-03-01 20:31:32 148

原创 引用的入门

引用 引用是C++对C的重要扩充。引用的实质:起别名。 int &b=a; &写到左侧:引用;&写道右侧:取地址。1.引用基本语法Type &别名 = 原名 void test05() { int a = 10; int& b = a; b = 20; cout << "a=" << a << ",b=" << b << en...

2022-02-28 22:22:50 202

原创 const

const的作用: 1.定义常量,具有不可变性; 2.便于进行类型检查,使编译器对处理内容有更多的了解,消除了一些隐患。 3.避免意义模糊的数字出现,便于进行参数的调整修改。 4.可以保护被修饰的东西,防止意外修改,增强程序的健壮性。 5.可以节省空间,避免不必要的内存分配。 6.提高效率,存在符号表中,没有储存和读内存的操作。C语言中const默认外部链接,C++默认内部链接C语言:test.c const int a = 10...

2022-02-28 12:45:10 55

原创 C++对C语言的增强

C++对C语言的增强1.全局变量检测增强2.函数检测增强,参数类型增强,返回值检测增强,函数调用参数检测增强3.类型转换检测增强4.struct增强 C语言使用必须加入struct关键字,C++可以不加 struct Person{ int m_Age; void plusAge(){ m_Age++; }}void test04(){ Person p1; p1.m_Age=10; p1.plusAge(); cout&l...

2022-02-28 08:41:18 82

原创 指针的大小

指针的大小1.指针所占空间与指针指向的内容和内容的大小无关2.不同操作系统及编译环境下指针类型所占用的字节数是不同的指针类型占用的内存大小是固定的(无论该指针指向哪种数据类型)编译生成16位的代码时指针占2个字节在32位系统中是4字节在64位系统中是8字节。...

2022-02-26 12:20:28 1453

原创 堆和栈的区别

1.存储内容不同 栈:函数调用时,栈中存放函数中的各个参数(局部变量)。栈底下是函数调用后的下一条指令。 堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容由程序员安排。2.管理方式不同 栈:由系统自动分配空间,同时系统自动释放空间。 堆:需要程序员手动申请并且手动释放,并指明大小。3.空间大小不同 栈:获取空间较小。 堆:获取空间与系统的虚拟内存有关,较灵活较大。4.能否产生碎片 栈:不会产生碎片,空间连续。 堆:采用链表的存储...

2022-02-26 10:04:20 174

原创 堆排序入门

堆排序堆的定义 小根堆:ai<=a2i、ai<=a(2i+1) 大根堆:ai>=a2i、ai>=a(2i+1) 从堆的定义可以看出,堆实质是满足如下性质的完全二叉树;二叉树中任一非叶子结点均小于(大于)它的孩子结点 堆排序 若在输出堆顶的最小值(最大值)后,使得剩余n-1个元素的序列重又建成一个堆,则得到n个元素的次小值(次大值)......如此反复,便能得到一个有序序列,这个过程称之为堆排序。 实现堆排...

2022-02-26 09:44:44 672

原创 命名空间namespace

主要用途:用来解决命名冲突的问题。1.命名空间下 可以放 函数、变量、结构体、类2.命名空间必须定义在 全局作用域 下3.命名空间可以嵌套命名空间4.命名空间是开放的,可以随时往原先的 命名空间 添加内容5.匿名(无名)命名空间 相当于写了 static int m_C;static int m_D; 只能在当前文件夹使用6.命名空间可以起别名game1.h#pragma once#include<iostream>using namesp...

2022-02-24 19:46:30 155

原创 C++中双冒号(::)作用域运算符

使用后调用全局变量,例子如下:#define _CRT_SECURE_NO_WARNINGS#include <iostream>using namespace std;int atk = 200;void test() { int atk = 100; cout << "局部攻击力:" << atk << endl; //双冒号::为作用域运算符,引用全局作用域 cout << "全局攻击力:" << ::at

2022-02-24 17:58:52 164

原创 NC127 最长公共子串

描述给定两个字符串str1和str2,输出两个字符串的最长公共子串题目保证str1和str2的最长公共子串存在且唯一。数据范围:1 \le |str1|,|str2| \le 50001≤∣str1∣,∣str2∣≤5000要求: 空间复杂度O(n^2)O(n2),时间复杂度O(n^2)O(n2)示例1输入:"1AB2345CD","12345EF"返回值:"2345"备注:1 \leq |str_1|, |str_2| \leq 5\,000...

2022-02-21 20:49:03 89

原创 位运算(C)

位运算1.按位运算 按位运算C有这些按位运算的运算符& 按位的与| 按位的或~ 按位取反^ 按位的异或<< 左移>> 右移 按位与&(两个都是1才是1)如果 x=1 并且 y=1, 那么x&y=1否则的话 (x&y)=0按位与常应用于两种应用: 让某一位或某些位为0: x & 0xFE FE最后一位为0,所以使得另一个数最后一位为0 取一个数中的一段: x &am...

2022-02-12 13:15:57 374

原创 文件及二进制文件

文件1.格式化输入输出 格式化的输入输出printf %[flags][width][.prec][hlL]typescanf %[flag]type %[flags][width][.prec][hlL]type Flag: -、+、(space)、0含义:左对齐、在前面放+或-、正数留空、0填充width或prec:number、*、.number、.*含义:最小字符数、下一个参数是字符数、小数点后的位数、下一个参数是小数点后的...

2022-02-12 11:05:30 755

原创 游戏设计思路

游戏设计思路1.MVC设计模式 MVCView:给用户看到的,取数据画出来Model:数据,View从Model取数据过来Ctrl:告诉model什么数据要怎么改 2.游戏设计思路 1.bs for objects 2.timer 3.scan、move 4.hit、crash 5.refresh、draw...

2022-02-10 18:34:30 2555

原创 交互图形程序设计

交互图形程序设计1.回调函数 2.图形交互消息#include "acllib.h"#include <stdio.h>void mouseListener(int x,int y,int button, int event){ static int ox=0; static int oy=0; printf("x=%d,y=%d,button=%d,event=%d\n",x,y,button,event); beginPaint()...

2022-02-10 18:12:04 160

原创 函数指针及其应用

1.函数指针#include <stdio.h>void f(void){ printf("in f()\n");}int main(int argc, char const argv[]) { int i=0; int a[]={1,2}; int *p=&i; *p=20; void (*pf)(void)=f; f(); (*pf)(); printf("%p\n",&i); p...

2022-02-10 17:11:31 218

原创 图形程序的终端输入输出

图形程序的终端输入输出#include "acllib.h"#include <stdio.h>int Setup(){ int x; initWindow("Test",DEFAULT,DEFAULT,800,600); initConsole(); printf("Hello\n"); beginPaint(); line(10,10,100,100); scanf("%d",&x); line(1...

2022-02-10 17:09:54 380

原创 大程序结构

大程序结构1.多个源代码文件 多个.C文件main()里的代码太长了适合分成几个函数一个源代码文件太长了适合分成几个文件两个独立的源代码文件不能编译形成可执行的程序 项目在Dev C++中新建一个项目,然后把几个源代码文件加入进去对于项目,Dev C++的编译会把一个项目中的所有的源代码文件都编译后,连接起来有点IDE有分开的编译和构建两个按钮,前者是对单个源文件文件编译,后者是对整个项目做链接 编译单元一个.c文件是一个编译单元编译器每次编译只处理...

2022-02-09 23:38:25 216

原创 编译预处理和宏

编译预处理和宏1.宏定义 编译预处理指令#开头的是编译预处理指令它们不是C语言的成分,但是C语言程序离不开它们#define用来定义一个宏.c->.i 编译预处理.i->.s 产生汇编代码文件.s->.o 目标代码文件.o->.out 链接等生成可执行文件 #define#define<名字><值>注意没有结尾的分号,因为不是C的语句名字必须是一个单词,值可以是各种东西在C语言的编译器开始编译之前,编译预处理...

2022-02-09 22:15:22 198

原创 程序的结构

程序结构1.全局变量 全局变量定义在函数外面的变量是全局变量全局变量具有全局的生存期和作用域 它们与任何函数都无关 在任何函数内部都可以使用它们 全局变量初始化没有做初始化的全局变量会得0值 指针会得到NULL值只能用编译时刻已知的值来初始化全局变量它们的初始化发生在main函数之前#include <stdio.h>int f(void);const int gAll2 = 1;int g2 = gA...

2022-02-09 21:33:54 81

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除