c++
没有撤退可言~
花有重开日,人无再少年
展开
-
全缺省参数,半缺省参数,函数重载
全缺省参数在C++中规定在定义函数的时候可以给定函数默认参数。举例void TestFunc (int a=10,int b=20,int c=30)。在主函数中这样(void TestFunc ( ))调用给定默认参数的函数的时候,运行也不会报错,那么在运行的时候,在Test内部就是采用默认参数。倘若在定义的函数是void TestFunc (int a=10,int b=20,in...原创 2019-05-04 16:26:15 · 597 阅读 · 0 评论 -
c++的初步认识
首先在这里说明一下,为什么选择截图,因为在cnds下编辑真的很不舒服原创 2019-05-06 18:47:23 · 205 阅读 · 0 评论 -
类和对象的特征
c++的特点:封装,继承,多态类的声明和对象的定义:c++中对象的类型称为类在用class定义的类,既不用private也不用public则默认类中成员是私有的。在struct定义的类中,既不用private也不用public则默认类中成员是私有的,这是因为c++要兼容c语言,在c语言中struct定义的结构体,在结构体外也是可以被其他成员访问的。private和public属于成员访...原创 2019-05-08 00:08:32 · 465 阅读 · 0 评论 -
c++和c语言const几种用法
在c语言中,const处于局部变量区可以通过指针来进行修改,但是处于全局变量区中的const具有只读的特点(被保护起来)不能被修改。用指针修改const的值的时候要进行类型强转成指针类型。在c++中无法对const修饰的变量用指针进行修改。在c语言中无法在局部范围内用const修饰的变量初始化一个数组,因为const可能通过指针被修改是伪常量,但是在c++中可以初始化数组, ...原创 2019-06-02 20:01:03 · 212 阅读 · 0 评论 -
c++引用
1.给数组起别名:int a[10]={1,2,3};int (&a2)[10]=a;利用typedef 起别名:typedef int (a3)[10];//定义了一个int类型并且包含十个元素的数组。关于引用的注意事项:1.如果一个函数返回的值是引用,那么可以当作左值。2.引用必须引用一块合法的内存(不能引用空)。3.不要返回局部变量的引用,因为函数调用完毕一般会...原创 2019-06-02 23:25:45 · 111 阅读 · 0 评论 -
c++内联函数
1.内联函数:c++中提出内联函数替代C语言中的宏函数。2.内联函数和宏函数(缺陷)的区别:宏定义出来的常量没有类型,并且一般定义在开头,通过undef卸载。没有作用域(为什么要说宏定义没有作用域是因为,他没有固定的类似于全 局变量和局部变量的那种块或者文件范围,他只要是从定义开始,到任何地方 都可以被undef来结束,所以说宏定义没有作用域)预期结果是11,但其实是12,因为...原创 2019-06-04 11:12:13 · 106 阅读 · 0 评论 -
c语言与c++封装的区别,关于构造函数和析构函数,调用拷贝构造构造函数的两种方法,构造函数的调用规则
c语言与c++封装的区别:类即是对象的抽象,对象也就是类的实例化。属性和行为:在c++中的区别就是,行为是函数,属性是通过类来定义的对象的类别。(人的属性是人类,狗的属性是动物) 在c语言中使用struct结构体封装一个类,但是只能封装一些变量,不能对函数(这里我们把函数称为行为)进行封装,函数在结构体外部进行定义与声明,也就是说将结构体外的任何一个对象都可以访问不同对象所定义的函数,...原创 2019-06-06 17:27:06 · 609 阅读 · 0 评论 -
类对象作为成员变量的构造规则,关键字explicit,new和malloc简单区别
类对象作为类成员的时候,先将类对象一一构造然后再构造构造自己,析构顺序正好相反例如下面这个在person类中,包含了phonne,和game两个类,所以构建顺序就是先构造phone,再构造game,最后再构建自身person,析构的顺序正好和构建顺序相反。关键字explicit:我们在定义一个对象的时候有时会存在着隐式类型转换,比如person p1;person p2=p1;(实际...原创 2019-06-09 01:06:20 · 349 阅读 · 0 评论 -
静态成员变量和变量静态成员函数单例模型
静态成员变量和静态成员函数:静态成员变量在编译的时候就会分配内存在成员变量前面加上static就会变成静态成员变量静态成员变量在类内声明,在类外进行初始化可以通过对象或者类名访问静态成员变量,因为静态成员变量并不属于某一个对象静态成员函数可以访问静态成员变量,不可以访问普通成员比变量静态成员变量和函数都有权限,设置成私有便不可以在类外通过变量或者类名访问把...原创 2019-06-09 22:06:10 · 314 阅读 · 0 评论 -
this指针,链式编程,常函数与常对象
this指针指向被调用的成员函数所属的对象(谁调用函数那么函数内部就会传入一个指向该对象的指针)this指针隐藏在每一个类的非静态成员函数中静态成员函数只能访问静态成员变量,不能访问普通成员变量解决命名冲突#include<iostream>using namespace std;class person{public: person(int a) //有...原创 2019-06-11 00:19:34 · 188 阅读 · 0 评论 -
三类友元函数,加法运算符重载,左移运算符重载,前置++和后置++运算符重载,智能指针,等号的重载,[ ]的重载
三类函数做友元全局函数做友元函数(全局函数写到类中声明并且加关键字friend)类做友元类成员函数做友元函数+运算符的重载 :加号运算符使用全局函数和成员函数都可以进行重载左移运算符重载:首先成员函数不可以做函数重载,只有成员函数才可以做左移<<运算符重载,其次是左移重载的时候传递两个参数,一个是cout因为一个函数只存在一个cout,所以就要传...原创 2019-06-15 16:01:15 · 658 阅读 · 0 评论 -
深拷贝与浅拷贝
到目前为止我们遇见了两种浅拷贝,一种是拷贝构造的时候下面这种情况,另外一种就是=运算符的时候的浅拷贝。#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class person{public: person(char *a) { cout <...原创 2019-06-15 17:01:47 · 72 阅读 · 0 评论 -
简易实现各种运算符重载
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>using namespace std;class mystring{ public: friend ostream& operator <<(ostream& cout,mystring &am...原创 2019-06-17 18:27:39 · 238 阅读 · 0 评论 -
继承,继承方式,继承中的对象模型,*继承中的构造和析构,继承中的同名处理,继承中静态成员的处理,对象构造和析构的调用原则,多继承概念以及问题,菱形继承和虚继承
关于继承:继承的基本写法:语法 class 子类 : 继承方式 父类继承可以大大减少代码重复内容基类(父类)【包含公共的内容】,派生类(子类)【包含私有内容】继承方式:仔细观察照片:发现基类的私有属性不可继承基类中公有的属性可继承,继承之后还是public基类中保护的属性可继承 ,继承之后还是protected继承中的对象模型:子类会继承父类中的所有类容,包括私有属性...原创 2019-06-20 23:56:37 · 128 阅读 · 0 评论 -
多态分类,静态联编,动态联编,多态原理解析,纯虚函数和抽象函数,虚析构和纯虚析构,纯虚析构
多态分类:静态多态:编译时多态(函数重载,运算符重载)动态多态:运行时多态静态联编,动态联编:静态联编:地址早绑定,在编译阶段就绑定好了动态联编:地址晚绑定,在运行阶段就绑定好了多态就是父类的引用或者指针指向子类对象多态原理解析:当父类有了虚函数之后,内部结构就会发生改变,内部多了一个vfptr(virtual function pointer)虚函数表指针,指...原创 2019-06-21 00:33:22 · 171 阅读 · 0 评论 -
多态
多态:c++支持编译时多态(静态多态)和运行时多态(动态多态)。运算符重载和函数重载就是静态多态,而派生类和虚函数实现运行时多态。静态多态和动态多态的区别就是函数地址的早绑定(静态联编)还是晚绑定(动态联编)。如果函数的调用,在编译阶段就可以确定函数的调用地址,并产生代码,就是静态多态,地址就是早绑定的。而如果函数的调用地址不能在编译期间确定,而需要运行时才决定,这就属于晚绑定。#inclu...原创 2019-07-16 22:40:17 · 126 阅读 · 0 评论 -
c++模板
new char(10);申请一个char类型的空间初始化为10new char[10];申请10各char类型空间泛型编程:模板:分为函数模板和类模板c++提供了函数模板,所谓的函数模板就是一个通用的函数类型太多了,但是逻辑又非常相似,于是就让类型参数化//1.自动类型推演,让编译器自己进行类型推演,如果有产生二义性直接报错#include<iostream>u...原创 2019-07-17 19:55:32 · 157 阅读 · 0 评论 -
c++类型转换,异常,输入输出流
c++类型转化,c++严格遵守类型匹配静态转换static_cast的用法1.用于类层次结构中基类和派生类指针或者引用之间的转换子类---->父类(不安全)父类----->子类(安全)2.普通的类型转换//基本类型转化#include<iostream>using namespace std;int main(){ char a =...原创 2019-07-19 02:49:47 · 279 阅读 · 0 评论 -
STL基本概念,三大组件基本使用,string容器
STL(Standard Template Library)标准模板库STC从广义上分为:容器,算法(algorithm),迭代器。容器和算法之间通过迭代器进行无缝连接一句话STL牛皮,大兄弟。第一种遍历:先可以将迭代器理解成指针#include<iostream>#include<vector>using namespace std;void ...原创 2019-07-19 23:26:06 · 177 阅读 · 0 评论 -
vector容器,deque容器,sort算法
vector维护一段线性的空间,vector提供的是随机访问的迭代器,意思是可以随机访问线性表中的元素。#include<iostream>using namespace std;#include<vector>void test(){ vector<int>v; for (int i = 0; i < 10; ++...原创 2019-07-20 15:54:18 · 742 阅读 · 0 评论 -
stack栈容器,queue队容器,list容器,
stack栈容器:stack他是一种栈容器,不允许有遍历行为,每次只能通过弹出栈来拿到栈顶的元素。栈容器没有迭代器,因为不具备遍历功能所以没有迭代器。所有元素必须符合后进先出#include<iostream>#include<stack>using namespace std;void test(){ stack<int&...原创 2019-07-21 01:34:48 · 220 阅读 · 0 评论 -
set/multiset(关联式)容器,对组,set不能重复插入的原理,map/multimap容器
set容器中的数字没有重复的,因为键值就是实值。set底层是用红黑树实现的,根据键值可以定位一个元素#include<iostream>#include<set>using namespace std;//关联式容器,只要插入数据就自动排序void printfs(set<int>& p){ for (set<int...原创 2019-07-21 22:03:24 · 329 阅读 · 0 评论 -
函数对象,谓词,内建函数对象的使用,适配器,
#include<iostream>#include<set>#include<algorithm>using namespace std;class person{public: void operator()(int num) { cout << num << endl; ...原创 2019-07-22 16:25:33 · 100 阅读 · 0 评论 -
常用遍历算法,常用查找算法,常见排序算法,常用拷贝和替换算法,常用算术生成算法,常用集合算法
#include<iostream>#include<vector>#include<algorithm>#include<functional>//1.添件头文件functional#include<string>using namespace std;//第一个就是:for_each前面我们已经学过了利用仿函数,或者回调...原创 2019-07-23 02:14:37 · 104 阅读 · 0 评论 -
初始化列表
初始化列表1. 什么是初始化列表? 与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。2. 为什么使用初始化列表 初始化类的成员有两种方式,一是使用初始化列表,二是在构造函数体内进行赋值操作。使用初始化列表主要是基于性能问题,对于内置类型,如int, float等,使用初始化...转载 2019-07-24 10:01:16 · 270 阅读 · 0 评论 -
C++实现贪吃蛇优化版
#ifndef _WALL_H_#define _WALL_H_#include<iostream>using namespace std;class WALL{public: enum {LONG = 40,WIND = 40}; //设置围墙大小 void initWall(); //初始化墙 void drawWall(); ...原创 2019-07-24 12:53:21 · 401 阅读 · 0 评论 -
利用传引用实现两个类的互通
class test{public: test() { }};class test2{public: test2() { } };//有如上两个类,假如想要实现两个类的内部互通在第二个类中的函数能够调用到第一个类中的函数或者对象class test2{public: test2(teat &te...原创 2019-07-25 10:31:11 · 225 阅读 · 0 评论 -
window---vs下的文件读写操作,以及创建文件,写入文件,并对文件进行读取和重新写入
前几天在做一件事情的时候无意之中需要在window下对一个东西需要保存,然后就找了一点关于这个东西,虽然具体深入我还不是很了解,但是还是顺利的解决了问题。包含头文件#include<fstream>#include<iomanip>#include<conoi.h>当你要新建一个文件来保存你想要保存的东西的时候,你可以ofstream file /...原创 2019-10-15 22:00:35 · 1641 阅读 · 0 评论 -
图书管理系统,带写入读出,退出后第二次依然可以读到存档数据
#include<iostream>#include<string>#include<fstream>#include<iomanip>#include<conio.h>using namespace std;struct BOOK{ int ID; double money; string book_name;};...原创 2019-10-16 12:49:42 · 173 阅读 · 0 评论