c++
小宣子xym
这个作者很懒,什么都没留下…
展开
-
c++入门【菜鸟学习日记】
从c到c++c++包含了整个c,c是建立c++的基础。c++包括c的全部特征、属性和优点,同时添加了面向对象编程(oop)的完全支持。c++语言包括过程性语言部分和类部分。过程性语言部分与c并无本质的差别,类部分是c中所没有的,它是面向对象程序设计的主体。面向对象程序设计的本质是把数据和处理数据的过程当成一个整体——对象。面向对象程序设计的实现需要封装和数据隐藏技术,需要**继承和多态性##技术。1原创 2017-09-26 19:44:51 · 313 阅读 · 0 评论 -
c/c++ 动态内存管理(一)
C语言中使用:malloc/calloc/realloc/free 进行动态内存管理 calloc:分配n个长度为size的连续内存空间,并初始为0 realloc:重新分配空间 void* realloc(void* p,size_t size) p为指向之前分配的内存块的指针int*p1=(int*)malloc(sizeof(int)*4);int*p2=(int*)c...原创 2018-02-26 19:12:18 · 266 阅读 · 0 评论 -
模拟实现atoi
#include#include#include#include#include//考虑到以下几点://NULL//空字符串//+-//溢出enum Status{ VALID,//合法 INVALID//非法};enum Status status = INVALID;int my_atoi(const char *str){ int flag = -原创 2018-01-21 14:59:23 · 170 阅读 · 0 评论 -
关于引用
引用==别名给已有变量起一个别名一个变量可以有多个别名(就像一个人可以有很多小名)引用必须在创建时就初始化(起别名时总要知道是给谁起)引用只能在初始化时,引用一次,引用后就不能再改变为其它变量的引用const 引用一个变量加上const,就是常变量(常量的一种),具有常性,不可直接修改注意点: int d1 = 4; const int & d2 = d1; d1 = 5;原创 2018-01-02 17:54:48 · 205 阅读 · 0 评论 -
为什么模板不支持分离编译
说到这,我们首先来说一下什么是分离编译? 声明和定义分开预处理 宏替换 条件编译 .h的展开编译 .cpp .cpp->汇编代码汇编 cpu机器码链接 -> 链接前两个.cpp不交互//template.h#pragma once#includeusing namesp原创 2017-12-07 13:58:06 · 129 阅读 · 0 评论 -
智能指针分析
为什么有智能指针?在我们写代码时,经常会忘记释放掉动态开辟出来的内存,或者在我们的程序中,new和delete中间有如 throw/goto/return/break 这样引起执行流改变的语句时,就会造成没有释放资源,造成内存泄漏。void Test1(){int* p=new int[100];Test();...delete[] p;调用的Test2()中如果有抛异常的话,就会无法释放原创 2017-11-26 16:35:37 · 233 阅读 · 0 评论 -
类型萃取&类的模板特化
类模板的特化 1、全特化 2、偏特化(局部特化)1、全特化template <>class Data<int, char>{public : Data() { cout<<"Data(int, char)"<<endl; }private : int _d1 ; char _d2 ;};2、偏特化(局部特化)偏特化分为两种1原创 2017-11-30 17:10:19 · 218 阅读 · 0 评论 -
多态&虚函数
虚函数:在类的成员函数前面加上关键字“virtual”,就称这个成员函数为虚函数。虚函数重写:在子类中定义了一个与父类完全相同(函数名和返回类型以及参数列表都相同)的虚函数时,称子类的这个函数重写(也称覆盖)了父类的这个虚函数。多态:一个类继承另一个类时,对一个函数进行重写,则此函数呈多态(多种形态)。为了指明某个成员函数具有多态性,就用关键字“virtual”来标志其为虚函数。#include<i原创 2017-11-03 17:47:54 · 249 阅读 · 0 评论 -
c++中的强制类型转换
const_cast const_cast最常用的用途就是删除变量的const属性,方便赋值。void TestConst() { const int a = 2; //volatile const int a = 2; int* p = const_cast< int*>(&a); *p = 3; cout << a << end原创 2017-11-28 18:55:04 · 152 阅读 · 0 评论 -
模板
1、模板与泛型编程模板是泛型编程的基础。泛型编程就是一种与类型无关的逻辑代码,是一种复用的方式。利用模板机制可以显著的减少冗余信息。原创 2017-11-17 15:17:18 · 167 阅读 · 0 评论 -
c++实现单/双链表
单链表#include<iostream>using namespace std;typedef int DataType;struct SListNode //在c++中结构体也就是一个类{ SListNode* _next; DataType _data; SListNode(DataType x) :_data(x) ,_next原创 2017-11-03 15:33:18 · 187 阅读 · 0 评论 -
c++实现顺序表
//顺序表就是动态增长的数组#include<iostream>#include<assert.h>using namespace std;typedef int DataType;class SeqList{public: SeqList()//构造 :_array(NULL) , _size(0) , _capacity(0)原创 2017-10-26 22:08:21 · 271 阅读 · 0 评论 -
调用时编译器的优化问题
构造拷贝构造的N种调用情况的编译器优化1、传参合传返回值时构造的优化处理include<iostream>using namespace std;class Date{public: Date()//构造 { cout << "Date()" << endl; } Date(const Date& d)//拷贝 { cou原创 2017-10-25 18:03:38 · 218 阅读 · 0 评论 -
动态链编与静态链编
重载1、函数在同一作用域里 2、函数名相同/参数不同 3、返回值可以不同重写(覆盖)1、函数不在同一作用域里(两个函数分别在父类和子类里) 2、函数名相同/参数列表相同/返回值相同(协变除外) 3、基类函数必须是虚函数(有关键字virtual) 4、访问修饰符可以不同重定义(隐藏)1、函数在不同作用域里(分别在父类和子类里) 2、函数名相同 3、在基类和派...原创 2017-11-12 20:20:29 · 1173 阅读 · 0 评论 -
探索多态的实现--虚表
上次说到了多态,可是多态在编译器里到底是如何实现的呢?下面我们就来探索一下它深层的实现机制class Base{public: virtual void func1() {} virtual void func2() {}private: int a1;};void Test(){ Base a; cout << sizeof(a)原创 2017-11-05 20:04:54 · 269 阅读 · 0 评论 -
STL空间配置器分析
今天阅读了《STL源码剖析》了解了一下stl中空间配置器的原理,一下进行分析总结stl中对于空间的配置与释放 std::alloc 在stl中对象构造前的空间配置和对象释放后的空间释放,是由...原创 2018-06-07 20:49:00 · 509 阅读 · 0 评论