C++
Damn_Yang
天空电闪又雷鸣
展开
-
C++类和对象(下篇)
1. 再谈构造函数2. static成员3.C++11的成员初始化新玩法4. 友元5.内部类6. 再次理解封装 1. 再谈构造函数1.1构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值 虽然上述构造函数调用之后,对象中已经有了一个初始值,但是不能将其称作为类对象成员的初始化,构造数体中的语句只能将其称作为赋初值...原创 2018-10-31 10:48:37 · 246 阅读 · 0 评论 -
C++list常用接口说明以及模拟实现list
1.list的介绍及使用1.1 list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。 list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其...原创 2018-12-01 18:12:28 · 741 阅读 · 0 评论 -
C++的IO流(C语言的输入与输出,流是什么,C++IO,文件流对象-读写序列化和反序列化)
1.C语言的输入与输出C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。scanf(): 从标准输入设备(键盘)读取数 据,并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度 输出控制。C语言借助了相应的缓冲区来进行输入与输出。如下图所示对输入输出缓冲区的理解:可以屏蔽掉低级I/O的实现...原创 2019-01-07 23:06:39 · 1311 阅读 · 0 评论 -
C++中的继承(概念,基类和派生类对象赋值转换,作用域,派生类的默认成员函数,继承与友元,继承与静态成员)
1.继承的概念及定义1.1继承的概念继承机制是面向对象程序设计使代码可以复用的最重要的手段,他允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了有简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。#include <iostream>#include <strin...原创 2019-01-13 21:25:20 · 578 阅读 · 0 评论 -
C++菱形继承和菱形虚拟继承及虚拟继承的原理
单继承:一个字类只有一个直接父类时称这个继承关系为单继承多继承:一个字类有两个或以上直接父类时成这个继承关系为多继承菱形继承:菱形继承是多继承的一种特殊情况菱形继承的问题:从下面的对象成员模型构造,可以看出菱形继承有是数据冗余和二义性的问题。在Assistant的对象中Person成员会有两份。class Person{public: string _nam...原创 2019-01-14 15:21:54 · 398 阅读 · 0 评论 -
C++多态(概念,多态的定义及实现,抽象类,override和final,多态的原理,单继承和多继承的虚函数表)
1. 多态的概念多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态比如买票这个行为,当普通人买票时,是全价买票;学生买票时,是半价买票;军人买票时是优先买票。2. 多态的定义及实现2.1多态定义的构成条件多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价...原创 2019-01-14 21:17:57 · 452 阅读 · 0 评论 -
C++异常的学习
1.C语言传统的处理错误的方式传统的错误处理机制终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。 返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的很多库的接口函数都是通过把错误码放到errno中,表示错误 C标准库中setjmp和longjmp组合。实际中C语言基本都是使用返回错误码的方式处理错误,部分情况下使用终止程序处理非常严重的错...原创 2019-01-15 15:38:44 · 225 阅读 · 0 评论 -
C++智能指针auto_ptr、unique_ptr、shared_ptr的实现及原理。
1.为什么需要智能指针?我们先分析一下下面这段程序#include <vector> void _MergeSort(int* a, int left, int right, int* tmp){ if (left >= right) return; int mid = left + ((right - left) >> 1); // ...原创 2019-01-16 14:09:59 · 807 阅读 · 0 评论 -
C++11新特性
1. C++11简介在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为 C++11之前的最新C++标准名称。不过由于TC1主要是对C++98标准中的漏洞进行修复,语言的核心部分则没 有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑, 第二个真正意义上的标准珊珊来迟。...原创 2019-04-10 15:26:32 · 303 阅读 · 0 评论 -
C++11右值引用,移动语义,完美转发
右值引用1. 移动语义如果一个类中涉及到资源管理,用户必须显式提供拷贝构造,赋值运算符重载以及析构函数,否则编译器将会自动生成一个默认的,如果遇到拷贝对象或者对象之间相互赋值,就会出错,比如:class String {public: String(char* str = "") { if (nullptr == str) str = ""; ...原创 2019-05-29 11:37:35 · 431 阅读 · 0 评论 -
C++ vector的常用接口说明以及模拟实现vector
1.vector的介绍及使用1.1 vector的介绍vector是表示可变大小数组的序列容器 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高校。但是又不像数组,它的大小是可以动态改变的,而且他的大小会被容器自动处理。 本质上,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分...原创 2018-11-30 17:52:53 · 695 阅读 · 0 评论 -
C++模拟实现string
string类常用接口说明在链接中的博客中:https://blog.csdn.net/Damn_Yang/article/details/84108864代码实现:String.h#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<assert.h>#include<string&g...原创 2018-11-29 13:23:41 · 296 阅读 · 0 评论 -
C++实现Date类(日期类)
Date.h#pragma once#include <iostream>using namespace std;class Date{public: Date(int year, int month, int day); /*Date(const Date& d);*/ Date& operator+=(const Date&...原创 2018-10-31 14:36:59 · 2848 阅读 · 0 评论 -
C++(关键字,命名空间,输入输出,缺省参数,函数重载,引用,内联函数,auto关键字(C++11),基于范围的for循坏(C++11),指针空值-nullptr(C++11))
1.C++关键字:2.命名空间在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。2.1命名空间的定义:定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一...原创 2018-10-24 15:52:52 · 531 阅读 · 0 评论 -
C++类和对象(上篇)
类与对象(上)1. 类与对象的初步认知2. 类的引入3. 类的定义4. 类的作用域5. 类的实例化6. 类的访问限定符及封装7. 类的对象大小的计算8. 类成员函数的this指针 1. 类与对象的初步认知C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,...原创 2018-10-26 21:52:48 · 362 阅读 · 1 评论 -
C++类和对象(中篇)
1. 类的6个默认成员函数2. 构造函数2.1 概念构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。2.2 特性构造函数是特殊的成员函数,其特征如下:1. 函数名与类名相同。2. 无返回值。3. 对象构造(对象实例化)时编译器自动调用对应的构造函数。...原创 2018-10-26 22:29:48 · 711 阅读 · 0 评论 -
C++实现单例模式
设计模式:设计模式是一套被反复使用,多数人知晓的,经过分类的,代码设计经验的总结。使用设计模式的目的:为了代码可重用性,让代码更容易被他人理解,保证代码可靠性。设计模式使代码编写真正工程化;设计模式是软件工程的基础脉络,如同大厦的结构一样。单例模式:一个类只能创建一个对象,既单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。比...原创 2018-11-07 17:28:27 · 384 阅读 · 0 评论 -
C++内存管理相关面试题
1.malloc/free和new/delete的区别2.请设计一个类,该类只能在堆上创建对象3.请设计一个类,该类只能在栈上创建对象4.单例模式(这个在面试中经常出现)5.内存泄漏 1.malloc/free和new/delete的区别malloc/free和new/delete的共同点是:都是从堆上申请空间,并且需要用户手动释放。不同的地方是:1.mall...原创 2018-11-07 17:29:12 · 668 阅读 · 0 评论 -
C++模板初阶(泛型编程,函数模板,类模板)
1.泛型编程怎么实现一个通用的交换函数呢使用函数重载虽然可以实现,但是有一下几个不好的地方:1. 重载的函数仅仅只是类型不同,代码的复用率比较低,只要有新类型出现时,就需要增加对应的函数2. 代码的可维护性比较低,一个出错可能所有的重载均出错那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?所以就引出了泛型编程的概念泛型编程:编写与类型无关...原创 2018-11-07 18:59:36 · 392 阅读 · 0 评论 -
C/C++内存管理
1. C/C++内存分布strlen 遇到“\0“结束sizeof和类型有关32位:申请的空间不超过3G;如果想超过3G,生成64位说明:1.栈又叫做堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的2.内存映射段是高效I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信3.堆用于程序运行时动态内存分配...原创 2018-11-05 17:18:35 · 233 阅读 · 0 评论 -
C++string类常用接口说明,深浅拷贝
标准库中的string类string是表示字符串的字符串类 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。 string在底层实际是:basic_string模板类的别名,typedef basic_string<char,char_traits,allocator>string; 不能操作多字节或者变长字符的序列在使用string类时...原创 2018-11-17 22:55:01 · 117296 阅读 · 2 评论 -
C++11 lambda表达式
1. C++98中的一个例子在C++98中,如果箱鸦片对一个数据集合中的元素进行排序,可以使用std::sort方法。#include <algorithm>#include <functional>int main(){ int array[] = { 4, 1, 8, 5, 3, 7, 0, 9, 2, 6 }; // 默认按照小于比较,...原创 2019-05-29 13:46:40 · 352 阅读 · 0 评论