cpp
不吃玉米尖尖
正在疯狂输入....
展开
-
【C++】命名空间的使用
命名空间的使用主要有三种方式:1.指定它属于该命名空间如下,用namespace指定,搭配域作用限定符就可以了。 namespace N{ int printf = 100; int strstr = 200;}int main(){ printf("%d\n",N::strstr); printf("%d\n",N::printf); system("pau...原创 2018-12-02 16:49:17 · 279 阅读 · 0 评论 -
【C++】类和对象(5)初始化列表、static成员、C++11成员初始化、友元函数及友元类、内部类
一、初始化列表在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。#include <iostream>using namespace std;class Date{public: Date(int year, int month, int day) { _year = year; _month = month; _day =...原创 2019-03-02 11:06:36 · 415 阅读 · 0 评论 -
【C++】C/C++的内存分布
C/C++中特别注重的是数据存储,这就与内存分不开,我们想要知道C/C++如何进行数据存储,就必须了解它们的内存分布。先来看一段代码:int globalVar = 1;static int staticGlobalVar = 1;void Test(){ static int staticVar = 1; int localVar = 1; int num...原创 2019-03-03 13:03:23 · 201 阅读 · 0 评论 -
【C++】C/C++中动态内存管理方式;new / delete 与 operator new / operator delete;
一、C语言动态内存管理方式在C语言中,动态内存管理的接口有malloc/calloc/realloc,那么三者之间有什么区别呢?简单来说就是malloc是动态开辟空间;calloc是开辟空间的同时按字节进行初始化为0,并且可以扩容,须知道要扩容到多大;realloc是对当前空间进行增容,对已有空间进行操作,空间足够大时原地扩容,否则另外扩容。详细可见【C语言】malloc,calloc...原创 2019-03-04 13:26:29 · 288 阅读 · 0 评论 -
【C++】单例模式(饿汉模式、懒汉模式)
什么是单例模式?首先先来了解一下设计模式。设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结,一共有23种经典设计模式。为什么会产生设计模式这样的东西呢?就像人类历史发展会产生兵法。最开始部落之间打仗时都是人拼人的对砍。后来春秋战国时期,七国之间经常打仗,就发现打仗也是有套路的,后来孙子就总结出了《孙子兵法》。孙子兵法也是类似。使用设计模...原创 2019-03-05 18:00:31 · 7363 阅读 · 2 评论 -
【C++】泛型编程;函数模板;类模板
一、泛型编程以前我们写过一个简单的交换函数。我们不难发现交换函数是与类型有很大关系的,int,double....那么如何实现一个通用的交换函数呢?void Swap(int& left, int& right){ int temp = left; left = right; right = temp;}void Swap(double&am...原创 2019-03-06 16:59:51 · 243 阅读 · 0 评论 -
【C++】String类、String类的常用接口说明及其使用、STL中的迭代器使用
C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP(Object Oriented Programming,面向对象程序设计)的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。所以C++中有了String类,而且在日常的生活工作中,为了简单、方便、快捷,基本都使用string类。...原创 2019-03-10 15:24:30 · 342 阅读 · 0 评论 -
【C++】string的部分接口补充(swap()、replace()、suffix()、find())
swap()swap()接口表示交换,有以下两种编写方式void test_string(){ string s1("hello"); string s2("world"); cout << s1 << "--" << s2 << endl; s1.swap(s2);//单纯地成员变量的交换,指针交换,代价小 cou原创 2019-03-11 16:13:36 · 3054 阅读 · 2 评论 -
【C++】构造函数初始化列表中成员变量必须初始化的几种情况
有一个类A,其数据成员如下:class A {...private: int a;public: const int b; float* &c; static const char* d; static double* e; };则构造函数中,成员变量一定要通过初始化列表来初始化的是:b,c构造函数中,成员变量一定要通过初始化列表来初始化的有以下几种...原创 2019-03-20 17:10:57 · 3621 阅读 · 0 评论 -
【C++】String中的深浅拷贝问题;深拷贝的两种写法(传统写法、现代写法)
一、浅拷贝问题浅拷贝首先定义一个Sting类,它包含一个成员变量,一个char*的指针。namespace CPP{ class String { public: private: char* _str; };}对于String类的拷贝构造函数及operator=函数来说,当用一个String对象拷贝构造或赋值给另一个String对象时,就是将...原创 2019-03-13 16:02:04 · 981 阅读 · 0 评论 -
【C++】数组指针和指针数组的辨析
在学习C语言的时候,数组和指针没有那么多的联系,但是当学习到c++的时候,指针和数组常常结合起来,于是就有了指针数组和数组指针这俩我傻傻分不清的概念~在今天,我把它们分清楚了。如果你也有一样的困惑,往下看~首先,理解一下数组指针和指针数组这两个名词:“数组指针”和“指针数组”,只要在名词中间加上“的”字,就知道中心了——数组的指针:是一个指针,什么样的指针呢?指向数组的指针。...原创 2019-03-23 11:18:39 · 227 阅读 · 0 评论 -
【C语言】C语言中static关键字的作用
在C语言中static的作用如下1.在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。2.、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。3.static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存...原创 2019-04-11 13:13:55 · 424 阅读 · 0 评论 -
【C++】三种智能指针(auto_ptr,unique_ptr,shared_ptr)
c++中的智能指针主要是基于RAII思想的。不懂RAII思想的同学可以看看这篇博文-->RAII思想---利用对象生命周期来控制程序资源智能指针的两大要素RAII思想:把资源交给这个对象管理 像指针一样的行为(重载operator*和operator->)template<class T>class SmartPtr{public://交给对...原创 2019-04-13 17:47:22 · 2030 阅读 · 0 评论 -
【C++】RAII思想---利用对象生命周期来控制程序资源
C语言中我们学过指针,那么为什么在C++中还需要存在智能指针呢?实际上它的出现就是给c++的内存管理“填坑”来的~ 因为它的内存自己管理,所以说,有的时候使用malloc或者new创建的对象忘记释放就会导致内存泄漏,又或者此时释放语句之前有一段代码是抛异常的话,那么执行流就会乱跳,导致内存也无法释放。比如这一段代码,若n太大,开辟空间失败会抛异常,导致执行流跳出没有释放指针p。void...原创 2019-04-10 09:35:22 · 832 阅读 · 0 评论 -
【C++】实现一个Date类
Date类的代码具体实现如下:Date.h#include <iostream>#include <stdio.h>#include <stdlib.h>using namespace std;class Date{public: Date(int year = 1900, int month = 1, int day = 1); D...原创 2019-02-28 16:10:50 · 575 阅读 · 0 评论 -
【C++】类和对象(2)类的作用域、类的大小的计算、类的实例化
一、类的作用域类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员,需要使用 :: 作用域解析符指明成员属于哪个类域。否则找不到。class person{public: void PrintfPersonInfo();private: char _name[20]; char _gender[3]; int _age;};//这里需要指定Pri...原创 2019-01-09 17:41:52 · 384 阅读 · 1 评论 -
【C++】类和对象(1)类的定义、访问限定符、封装
一、概念认知类和对象是什么呢?初听到这个概念还不是很理解。其实类和对象可以说就是更好的模拟我们这个现实世界。面向过程的C语言关注的是一个一个的过程,实现一个一个的函数。 那么什么是面向对象呢?就是用另类的方式去认知我们的世界。从小到大,我们对于世界的认知就是分类的。我们不会说:哎,这有一只狗,那有一只狗。而是会说:这里有几只狗。我们会划分类别,将生划分为动物植物等,再把动物划分为猫...原创 2019-01-09 16:51:19 · 535 阅读 · 0 评论 -
【C++】C++输入&输出
在C语言中,我们的输入输出靠的是标准库函数,最常用的就是 scanf 和 printf 这一对了。那么C++又是怎么样实现输入输出的呢?下面来写C++的第一个程序!#include <iostream>using namespace std;int main(){ cout << "hello world" << endl; system("...原创 2018-12-02 18:20:29 · 402 阅读 · 0 评论 -
【C++】缺省参数及其分类
C++中有个重要的概念叫做缺省参数。那么什么是缺省参数呢?我们可以把它理解为备胎。缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。void TestFunc(int a = 0){ cout<<a<<endl;}int main(){ TestFunc(); // 没有...原创 2018-12-04 10:51:28 · 397 阅读 · 0 评论 -
【C++】函数重载
在我们的日常生活中,常常可以发现,有的词语有多重含义,即这个词被重载了。函数重载,其实是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的形参列表(参数个数或者类型或者顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。例如:int Add(int left, int right){ return left+right;}double...原创 2019-01-06 14:36:09 · 168 阅读 · 0 评论 -
【C++】引用那些事(1)
一、什么是引用? 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如:李逵,在家称为"铁牛",江湖上人称"黑旋风"。类型& 引用变量名(对象名) = 引用实体;void TestRef(){ int a = 10; int& ra = a;//<====定义引用类型...原创 2019-01-07 09:18:00 · 440 阅读 · 5 评论 -
函数的定义与声明的区别
C语言编译系统是由上往下编译的.一般被调函数放在主调函数后面的话,前面就该有声明.不然C由上往下的编译系统将无法识别。正如变量必须先声明后使用一样,函数也必须在被调用之前先声明,否则无法调用!函数的声明可以与定义分离,要注意的是一个函数只能被定义一次,但可以声明多次。函数声明由函数返回类型、函数名和形参列表组成。形参列表必须包括形参类型,但是不必对形参命名。这三个元素被称为函数原型,函数原型描...原创 2019-01-06 15:42:38 · 27243 阅读 · 7 评论 -
【C++】引用那些事(2)
一、传值、传引用效率比较以值作为参数或者返回值类型,在传参和返回期间,函数不会直接传递实参或者将变量本身直接返回,而是传递实参或者返回变量的一份临时的拷贝,因此用值作为参数或者返回值类型,效率是非常低下的,尤其是当参数或者返回值类型非常大时,效率就更低。#include <time.h>struct A{ int a[10000];};void TestFun...原创 2019-01-07 13:19:54 · 288 阅读 · 0 评论 -
【C++】类和对象(4)类的六个默认成员函数
一、类的六个默认成员函数下面是一个Date类,但是它类中什么成员也没有,这就是空类。但是它虽然看起来什么都没有,实际上不是的,在我们什么都不写的情况下,它会自动生成六个默认的成员函数。如图所示的构造函数、析构函数、拷贝构造函数、赋值重载函数、普通对象取地址函数、const对象取地址函数这六个函数,就算我们自己不写,也会默认生成。class Date {};二、构造函数...原创 2019-01-11 19:41:10 · 286 阅读 · 0 评论 -
【C++】内联函数
一、概念以 inline 关键字修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。如果在上述函数前增加 inline 关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的调用。 二、特点1. inline是一种以空间换时间的做法,省去调用函数额开销。所以代码很长或者有循环/递归的函数不适宜使用作为内...原创 2019-01-07 18:01:02 · 162 阅读 · 0 评论 -
【C++】auto关键字
在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量。C++11中,auto有了全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。通俗地讲,auto关键字是可以自动推导变量类型的。需要注意的是,auto不是一个类型的“声明”,而是一个“占位符”,编译器在编译期会将...原创 2019-01-08 10:47:59 · 6317 阅读 · 0 评论 -
【C++】基于范围的for循环(C++11)
一、语法概念在C++98中,如果要遍历一个数组,会有以下代码:void TestFor(){ int array[] = { 1, 2, 3, 4, 5 }; for (int i = 0; i < sizeof(array) / sizeof(array[0]); ++i)//普通循环 array[i] *= 2; for (int* p = array;...原创 2019-01-08 10:48:05 · 637 阅读 · 0 评论 -
【C++】指针空值 nullptr
在c++98中,指针空值为NULL,NULL实际是一个宏,在传统的C头文件(stddef.h)中,可以看到如下代码:#ifndef NULL#ifdef __cplusplus#define NULL 0#else#define NULL ((void *)0)#endif#endif可以看到,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。不论采...原创 2019-01-08 10:48:11 · 820 阅读 · 0 评论 -
空指针引用故障(空指针解引用)
C语言中的指针机制使得它灵活高效,但由于指针操作不当产生的动态内存错误也有很多,比如内存泄漏(Memory Leakage)、内存的重复释放、空指针解引用(NullPointer Dereference)。其中空指针引用故障,也叫空指针解引用是一类普遍存在的内存故障,是程序设计语言中一类常见的动态内存错误。指针变量可以指向堆地址、静态变量和空地址单元 。当指针指向无效内存地址时对其引用,有可能...原创 2019-01-09 18:52:45 · 6191 阅读 · 0 评论 -
【C++】类和对象(3)—>> this指针
一、this指针的引入我们在现实中,定义一个类都是根据一个需求来定义的。所以先来看一个常用的日期类 Date 。class Date{public: void Print() { cout << _year << "-" << _month << "-" << _day << en原创 2019-01-09 18:54:01 · 242 阅读 · 0 评论 -
如何使用STL关联式容器 ---- set、multiset
关联式容器及键值对STL中,像vector、list、deque、forward_list(C++11)等,这些容器统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。STL中,关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。键值对是用来表示具有一 一对应关系的一种...原创 2019-05-11 18:34:34 · 278 阅读 · 0 评论