C/C++
C/C++学习
心文花雨
这个作者很懒,什么都没留下…
展开
-
C语言main函数详解
一、定义int main(int argc, char *argv[]){ ... return 0;}int 指明了main()函数的返回类型,函数名后面的圆括号一般包含传递给函数的信息。对于void main(),有些编译器允许这种形式,但是还没有任何标准考虑接受它。二、main()函数的返回值从前面我们知道 main() 函数的返回值类型是int型的,...原创 2020-02-20 19:24:54 · 3721 阅读 · 1 评论 -
选择结构
在C语言中,我们可以使用if和else关键字对条件进行判断例如:输出两个数中较大的数#include <stdio.h>int main(){ int a = 0; int b = 0; printf("请输入两个数:"); scanf("%d,%d", &a, &b); if (a > b) ...原创 2019-06-25 09:16:08 · 80 阅读 · 0 评论 -
程序编译过程发生了什么
1. 编译预处理编译预处理:读取c源程序,对其中的伪指令(以#开头的指令)和特殊符号进行处理。伪指令主要包括以下四个方面:(1)宏定义指令,如# define Name TokenString,#undef等。对于前一个伪指令,预编译所要作得的是将程序中的所有Name用TokenString替换,但作为字符串常量的Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被...原创 2019-06-22 21:10:57 · 464 阅读 · 0 评论 -
C语言如何修改const
利用指针修改 const#include <stdio.h>int main(){ const int a = 10; printf("%d\n", a); int* b = (int*)&a; *b = 20; printf("%d\n", a); return 0;}原创 2019-06-22 16:30:37 · 725 阅读 · 0 评论 -
C语言类型大小
代码测试:void Test1(){ printf("char = %d\n", sizeof(char)); printf("short = %d\n", sizeof(short)); printf("int = %d\n", sizeof(int)); printf("long = %d\n", sizeof(long)); printf("...原创 2019-06-22 16:16:54 · 564 阅读 · 0 评论 -
数组
一、什么是数组把数据放入内存,必须先要分配内存空间,放入4个整数,就得分配4个int类型的内存空间,共 4×4=16 个字节,并为它们起了一个名字a,它所包含的每一个数据叫做数组元素,所包含的数据的个数称为数组长度,例如就定义了一个长度为4的整型数组,int a[4],数组中的每个元素都有一个序号,这个序号从0开始,使用数组元素时,指明下标即可,array[index],array为数组名称...原创 2019-06-22 15:46:46 · 114 阅读 · 0 评论 -
三子棋小游戏
一、三子棋简介三子棋,民间传统游戏,又叫九宫棋、井字棋等。对局开始时,先由执任意一方将一枚棋子落在棋盘上,然后由另一方在已落的棋子子周围的交叉点上落子,只要将自己的三个棋子走成一条线,对方就算输了。二、流程逻辑三、函数模块(1)初始化:定义一个三行三列的数组,每一个元素的值为0void Init(int array[3][3]){ int i, j = 0; for...原创 2018-11-02 17:52:03 · 556 阅读 · 1 评论 -
数组操作
(1)创建一个数组,实现函数init()初始化数组、(2)实现empty()清空数组、(3)实现reverse()函数完成数组元素的逆置。要求:自己设计函数的参数,返回值。程序代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include <windows.h>#include <...原创 2018-08-15 17:02:08 · 307 阅读 · 0 评论 -
C语言操作符总结
一、流程图二、操作符的优先级表原创 2018-08-08 19:00:54 · 175 阅读 · 0 评论 -
完成猜数字游戏
代码:#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include <windows.h>#include <stdlib.h>#include <time.h>void menu(){ printf("\t\t==============欢迎玩猜数字小游戏=======...原创 2018-08-02 16:46:27 · 405 阅读 · 1 评论 -
设计模式设计原则
一、依赖倒置原则(DIP)高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定)抽象(稳定)不应该依赖于细节(变化),实现细节应该依赖于抽象(稳定)二、开放封闭原则(OCP)对扩展开放,对更改封闭类模块应该是可扩展的,但是不可修改三、单一职责原则(SRP)一个类应该仅有一个引起它变化的原因变化的方向隐含着类的责任四、Liskov 替换原则(L...原创 2019-09-14 15:50:36 · 164 阅读 · 0 评论 -
C++产生随机数
一、前言在看C++生成随机数之前,先来看一下如何C语言如何生成随机数#include <stdio.h>#include <stdlib.h>#include <time.h>int main(){ int i = 0; // 初始化种子为随机值 srand((unsigned int)time(0)); for (; i < ...原创 2019-08-18 22:16:37 · 4854 阅读 · 0 评论 -
static 关键字
1. 隐藏当同时编译多个文件时,所有未加 static 前缀的全局变量和函数都具有全局可见性,加上static之后将不可见sum.cint g_val = 1;test.cextern int g_val;void Test(){ int sum = g_val + 2; printf("%d\n", sum);}运行之后会输出3;当sum.c ...原创 2019-06-22 17:15:50 · 136 阅读 · 0 评论 -
C++如何定义一个函数指针
首先给出一个函数int function(int a){ return a;}一、定义一个函数指针int (*fun)(int a);// 赋值fun = function;// 使用fun(2);二、定义一个函数指针类型typedef int (*function_p)(int a);//定义一个实体函数指针 funcyion_p fun;/...原创 2019-06-13 11:08:19 · 13355 阅读 · 3 评论 -
智能指针
一、智能指针的引入int Func(int num1, int num2){ if (num2 == 0) { throw string("除0错误"); } return num1 / num2;}void TestFunc(int num1, int num2){ try { Func(num1, num2); } catch (const string...原创 2019-04-24 15:24:28 · 118 阅读 · 0 评论 -
C++异常处理
一、C语言异常处理(1)终止程序,如assert,缺陷:发生内存错误,除0错误时就会终止程序。(2)返回错误码,缺陷:系统的很多库的接口函数都是通过把错误码放到errno中,需要程序员自己去查找对应的错误,表示错误(3)C 标准库中setjmp和longjmp组合jmp_buf buff;void TestFunc1(){ FILE* pf = fopen("tes...原创 2019-04-21 10:51:49 · 147 阅读 · 0 评论 -
多态
一、概念同一事物在不同场景下表现出不同的形态二、实现多态的条件(1)基类中必须存在虚函数,派生类必须对基类中的虚函数进行重写(2)必须通过基类的指针或者引用来调用虚函数虚函数:类的成员函数前面加上 virtual 关键字,则这个成员函数称为虚函数虚函数重写:当在子类定义了一个与父类相同的虚函数时,则称子类的这个函数重写(也称覆盖)了父类的这个虚函数三、重写的条件来看...原创 2019-03-18 21:34:33 · 110 阅读 · 0 评论 -
赋值运算符重载
一、运算符重载1. 为什么要有运算符重载?仔细地想一下,就是为了增强代码的可读性2. 什么是运算符重载?运算符重载是具有特殊函数名的函数,也具有其返回值类型;它的函数名字为:operator 要重载的运算符符号; 它的函数原型是:返回值类型 operator操作符(参数列表)3. 我们要注意哪些问题(1) 要重载函数的参数至少有一个是自定义类型(2) 要重载的操作符必须...原创 2018-11-26 11:35:26 · 781 阅读 · 0 评论 -
缺省参数和函数重载
一、原创 2018-11-23 12:17:14 · 263 阅读 · 0 评论 -
引用
一、概念引用不是重新定义一个变量,而是给已存在变量取了一个别名,就像人的小名一样,编译器不会为引用变量开辟内存空间,它和它所引用的变量共用同一块内存,使用时用类型(和引用实体是同种类型的)& 引用变量名(对象名)=引用实体void ReferenceTest(){ int a = 1; int &ra = a; cout << a &...原创 2018-11-23 19:41:21 · 173 阅读 · 0 评论 -
const修饰类的成员函数
一、概念将const修饰的类成员函数称之为const成员函数。const修饰类成员函数,实际修饰该成员函数隐含的 this 指针,表明在该成员函数中不能对类的任何成员进行修改。二、 const 成员函数(1)const 类成员函数中不能修改类的成员变量,const 修饰的是 this 指针指向空间的内容class Date{public: void GetDay(vo...原创 2018-11-26 12:51:50 · 4750 阅读 · 2 评论 -
内联函数
一、前言在C语言中,我们曾经学习过宏函数,它没有函数调用参数压栈开销,代码的复用性高,运行效率高的优点,当然了它也有一些不好的地方:编译器在预编译阶段进行了替换,所以不方便调试宏;代码可读性差,可维护性差,容易误用;另外它还有没有类型安全的检查 。首先,我们通过一个简单的程序了解一下#include <iostream>using namespace std;#de...原创 2019-01-09 11:20:13 · 190 阅读 · 0 评论 -
auto关键字
一、auto 简介在C语言中,使用 auto 修饰的变量,是具有自动存储器的局部变量,但很少有人去使用它,在C++11中,auto 有了新的含义,它不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto 声明的变量必须由编译器在编译时期推导而得。我们通过一个简单的代码来了解一下注意:auto就是一个占位符,编译器会根据初始化来推演出类型,填充位置,所以auto必...原创 2019-01-09 12:17:24 · 7345 阅读 · 0 评论 -
单例模式
一、概念一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全 局访问点,该实例被所有程序模块共享。二、恶汉模式不管是否使用,在程序启动时就创建的唯一实例对象class Singleton{ public: static Singleton* GetInstrance() { ...原创 2019-01-25 22:57:51 · 232 阅读 · 0 评论 -
C++动态内存管理
一、C语言内存管理1.申请空间(1)void* malloc(unsigned size);在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址,malloc 分配的内存是位于堆中的,并且没有初始化内存的内容,malloc之后,可调用函数memset来初始化这部分的内存空间。(2)void* calloc(size_t nu...原创 2019-01-10 10:56:06 · 928 阅读 · 0 评论 -
C++模板与泛型编程
一、函数模板1. 概念函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。2. 定义(1)语法template <typename T1, Typename T2, ..., Typename Tn>以template 开始,后跟模板参数列表,模板参数列表不能为空,用 <> 括起来,用逗号分隔,除...原创 2019-01-26 11:26:07 · 224 阅读 · 0 评论 -
VS 常用快捷键
1. 编译/运行/调试编译程序:F7 运行程序:Ctrl + F5 打断点:F9 开始调试,运行到断点位置:F5 调试时单步执行:F10 调试时单步进入函数:F11 结束调试:Shift + F5 清楚所有断点:Ctrl + Shift + F9 调试跳出执行当前执行点所处函数的剩余行:Shift + F11注意:有些计算机需要加上 Fn 使用2. 代码编辑注释选定内...原创 2019-01-26 21:46:49 · 315 阅读 · 0 评论 -
C++ 模板实现顺序表
代码:#define __SEQLIST_H__#ifdef __SEQLIST_H__ #include <iostream>#include <assert.h>#include <string.h>template <class T>class Seqlist{ public: Seqlist();...原创 2019-01-27 17:15:48 · 637 阅读 · 0 评论 -
初识 STL
一、概念STL中文名叫标准模板库,是C++标准库的重要组成部分,是一些“容器”的集合,这些“容器”有list,vector,set,map等,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架,STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。二、版本原始版本:Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本。P. J...原创 2019-01-28 12:52:58 · 264 阅读 · 0 评论 -
继承
一、概念继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一,原始类称为基类,继承类称为派生类,也可以叫父类和子类,继承的方式有三种分别为公有继承(public),保护继承(protect),私有继承(private)二、定义方式: 三、三种继承方式的关系: 继承方式 public成员 protected成员 ...原创 2019-02-17 17:43:37 · 202 阅读 · 0 评论 -
构造函数 析构函数 拷贝构造函数
一、构造函数为了更好的说明构造函数,首先建立一个简单的日期类Date.cppclass Date{public: void DatePrint(); void DateSet(int year, int month, int day);private: int m_year; int m_month; int m_day; };vo...原创 2018-11-21 10:24:28 · 379 阅读 · 0 评论