c++
c++学习中的总结
errors5835
这个人比较懒,什么都没有留下
展开
-
智能指针
RAII是一种规范,用来解决问题的思想,定义类来封装资源分配和释放,构造函数完成资源的分配和初始化,析构函数完成资源的清理 智能指针不是指针,是一个类,可以实现 1. 智能管理指针的释放 2. 能够像指针一样使用 3. 完成正常的赋值拷贝 是RAII的一种应用 auto_ptr:较早期的智能指针,在实现赋值运算符重载时,使用管理权的转移来实现,有缺陷;templete<classT>c原创 2017-05-08 23:06:01 · 233 阅读 · 0 评论 -
STL中vector和list的使用
vectorvector时可以改变大小的数组的序列容器 意向书组车一样,vetctor为它们的元素使用连续的存储位置,这意味着vector的元素也可以使用对其元素的常规指针的偏移来访问,但是与list不同,它们的大小可以动态的改变,其存储由容器自动处理. vector擅长的方面 1. 通过为止索引访问单个元素.(O(1)) 2. 按照任意顺序遍历元素 3. 从它的末端天嘉禾删除元素(原创 2017-09-03 09:33:19 · 549 阅读 · 0 评论 -
为什么模板不支持分离编译
首先我要介绍分离编译的概念?一个程序由若干个原文件共同实现,每个源文件单独编译生成目标文件,然后再将所有的目标文件链接起来生成单一的可执行程序的过程.ps.我所理解的分离编译就是不在同一个.h或.cpp文件中定义和实现.程序编程过程如图所示 生成的源文件即在对应的.h和.cpp文件组成编译单元(其中.h的代码被扩展到包含.h的.cpp文件里),然后编译器把.cpp问津编译为目标文件.obj文件(文原创 2017-08-31 16:08:38 · 539 阅读 · 0 评论 -
大数运算_string类的简单应用
在通过对string类的学习之后,我们就可以通过对string类的使用去模拟大数的运算.#pragma once#include<string>#include<assert.h>#include<iostream>using namespace std;typedef long long INT64;#define Max_INT64 0x7FFFFFFFFFFFFFFF#defi原创 2017-07-25 14:27:35 · 443 阅读 · 0 评论 -
深浅拷贝与写时拷贝
在c++中,基本所有的类都要考虑深拷贝,浅拷贝与写时拷贝,根据不同的定义,选择适合自己的拷贝方式。时间类就可以用浅拷贝,而二叉树,string类就需要深拷贝。 string类在vs编译器下使用的深拷贝,在Linux下使用的浅拷贝。 为什么会存在深浅拷贝的问题呢? string的浅拷贝是让两个不同的指针指向同一块空间,而这在析构的时候会出现将一块空间释放两次,程序会崩溃,因此我们才需要进行原创 2017-07-13 13:57:07 · 428 阅读 · 0 评论 -
c++之多态
多态问题简单的概括就是“一个接口,多种方法”,程序在运行时才能决定调用的函数,它是面向对象编程领路的核心概念,字面意思就是多种状态。 c++多态是用过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(或者称为重写),重写分为两种,直接重写成员虚函数和重写虚函数,只有重写了虚函数才算是体现了c++的多态性!!!而重载则是允许有多个同名函数,而这些函数的参数列表不同,允原创 2017-04-28 14:05:09 · 256 阅读 · 0 评论 -
c++实现单链表,双向链表,顺序表的接口(非模板)
在以前使用c实现单链表的时候,没有使用函数的复用去完成相应的接口操作,这次使用尽量多的复用去完成链表和顺序表的操作(包括故意使用insert()去复用pushback()这个逻辑是错的,只是为了 体现复用的简便)单链表struct SListNode{ SListNode* _next; DataType _data; SListNode(DataType x)原创 2017-07-18 22:33:05 · 320 阅读 · 0 评论 -
讨论构造函数的N种调用情况的问题
c++对传参和传返回值时构造的优化处理c++形式参数类型和返回值类型如果是引用,那么在传递时,那么在传递时,会把实参或者返回值的引用自动赋值给形式参数(返回值)c++返回赋值和返回值的使用往往会进行编译器的优化.c++函数参数(或者返回值)赋值时,如果其类型是类类型并且对应的构造函数存在,那么会自动调用匹配的构造函数构造 任何的问题只有实践之后才能知晓真正的原理class AA {};原创 2017-07-13 10:45:28 · 269 阅读 · 0 评论 -
c++之各种继承(单继承,多继承,菱形继承)
基本简介在c++语言中。,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承,从多个基类派生的继承称为多继承。继承可以使代码得到复用,子类还可以在父类的基础上添加功能 c++继承分为公有继承,私有继承,保护继承三类 单继承的定定义格式: class <派生类名>:<继承方式><基类名> { <派生类新定义成员> } 多继承的定定义格式: cla原创 2017-04-27 14:12:32 · 600 阅读 · 0 评论 -
c&c++动态内存管理
malloc/free和new/delete的区别和联系:区别:malloc/free函数原型 void *malloc(long NumByte);该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返回一个空指针(NULL); void free(void*FirstByte):该函数是将之前malloc分配的空间还给程序或者操作系统,也就是释放了这块内存.内原创 2017-07-13 10:13:05 · 226 阅读 · 0 评论 -
日期类(Date)_运算符重载简单应用
面对日期类里面的加加减减涉及到的进位和借位,我更倾向使用一个保存了每个月天数的数组代替,虽然很占内存,但是方法简化了,而且不需要遍历数组,只需要拿到月份的数字,用月份的数字当下标就可以得到这个月的天数(哈希表的简单应用),这种方法很好用,尤其是在需要不断的遍历数组的时候,可以用这种方法代替遍历. 在写代码的时候,还需要注意代码的复用,这样写代码的效率会变高,不会把时间都浪费在写很多类似的逻辑上,比原创 2017-06-30 10:58:44 · 650 阅读 · 0 评论 -
c++默认的六个成员函数
默认的六个成员函数包括构造函数拷贝构造函数析构函数赋值运算符重载取地址运算符(&)重载const修饰的取地址运算符重载构造函数构造函数的命名必须和类名完全相同;构造函数的功能主要用于在类的对象创建时定义初始化的状态。没有返回值,也不能用void修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择,而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么原创 2017-04-16 22:55:33 · 262 阅读 · 0 评论 -
c++入门
1.命名空间 C++所有的标识符都存到一个std的命名空间内,只有调用这个命名空间才能使用标识符(using namespace std;); 当然,我们也可以使用自定义的命名空间去定义多个同名变量,函数,只需在调用的时候加上自定义命名空间的名称作用域限定符即可; 在实际使用中,对于小组开发的程序,命名空间起着重要的作用,使得小组成员写的同名函数可以正常使用。 2.C++基本的输入输出流(原创 2017-06-19 16:52:18 · 221 阅读 · 0 评论 -
c与c++区别之this指针的巧妙应用
this指针(一个永远指向调用对象首地址的指针)为什么要使用this指针在c++刚开始学习的过程中,通篇都在强调“类是对象的抽象,对象是类的示例”。那么当同一个类内的不同对象调用同一个函数体的时候,函数体将不同对象的数据进行整合计算,得到的值在返回到该对象的过程是如何实现的呢?在c语言中我们习惯使用一个指向结构体的指针实现,而在c++中,函数体会隐式的调用this指针,将对象的首地址传给函数体而实现原创 2017-03-12 18:18:40 · 606 阅读 · 0 评论