C/C++
文章平均质量分 81
cr2066
与其在叹气中度过一生,不如在阳光中奔跑一生。
展开
-
虚函数和纯虚函数的区别
首先:强调一个概念定义一个函数为虚函数,不代表函数为不被实现的函数。定义他为虚函数是为了允许用基类的指针来调用子类的这个函数。定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。1、简介假设我们有下面的类层次:[cpp] view plaincopyprin转载 2016-07-14 14:15:41 · 221 阅读 · 0 评论 -
内存区域的划分和分配
1.内存分配方式 内存分配方式有三种: [1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 [2]在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 [3]从堆上分配,转载 2016-12-27 11:09:27 · 504 阅读 · 0 评论 -
C++中调用开源库路径问题
包含目录:#include 中headerfile.h的搜索目录。如果有X.h找不到,设置这个目录可以解决。库目录:就是寻找.lib文件的目录。附加依赖项:C++的库会把函数、类的声明放在*.h中,实现放在*.cpp或*.cc中。编译之后,*.cpp,*.cc,*.c会被打包成一个.lib文件,这样可以保护源代码。在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1转载 2016-11-15 12:29:09 · 774 阅读 · 0 评论 -
C++中的new、operator new与placement new
new operator/delete operator就是new和delete操作符,而operator new/operator delete是函数。new operator(1)调用operator new分配足够的空间,并调用相关对象的构造函数(2)不可以被重载operator new(1)只分配所要求的空间,不调用相关对象的构造函数。当无法满足所要求分配的空间转载 2016-08-23 14:46:47 · 265 阅读 · 0 评论 -
std::bind与std::function详解
std::bind1、定义bind(F f, T1 t1, T2 t2, ..., TN tN);具体为:bind(&要调用的函数,&对象, 要调用函数的参数1,要调用函数的参数2...,_1(bind函数的参数1),_2(bind函数的参数2)...)注:如果bind的是一个非静态成员函数,第二个参数一定是一个该成员的一个指针,后面才是正常的参数。2、bind使用形式原创 2016-08-08 00:20:53 · 8141 阅读 · 3 评论 -
C++中的拷贝
一、拷贝构造函数1、拷贝构造函数的参数为什么必须使用引用类型? 答:如果拷贝构造函数中的参数不是一个引用,即形如CClass(const CClass c_class),那么就相当于采用了传值的方式(pass-by-value),而传值的方式会调用该类的拷贝构造函数,从而造成无穷递归地调用拷贝构造函数。因此拷贝构造函数的参数必须是一个引用。 需要澄清的是,传原创 2016-08-18 09:11:20 · 355 阅读 · 0 评论 -
初探句柄
1.引出句柄CDC问题:1.CDCdc;dc.LineTo(point);无法运行2.CDC*dc=GetDC();dc->LineTo(point);就可以运行了MFC中有大量的句柄包装类。顾名思义,所谓句柄包装类,指的是这些类是封装了系统对象的句柄(HWND,HDC,HBITMAP等等),并提供了一组成员函数作为访问系统对象的接口。(这是一种资源封装的理念的体现原创 2016-08-17 15:21:53 · 226 阅读 · 0 评论 -
C++函数中不可被声明为虚函数的函数
常见的不不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。 1、为什么C++不支持普通函数为虚函数? 普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思,因此编译器会在编译时邦定函数。2、为什么C++不支持构造函数为虚函数? 这个原因很简单,主要是从语义上考虑,所以原创 2016-08-17 13:59:02 · 299 阅读 · 0 评论 -
C++中getline与C中scanf、gets小结
getline()的原型是istream& getline ( istream &is , string &str , char delim );其中 istream &is 表示一个输入流,譬如cin;string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以);char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为原创 2016-08-04 00:14:04 · 1918 阅读 · 0 评论 -
C语言中函数参数入栈的顺序
先通过一个小程序来看一看: #include void foo(int x, int y, int z){ printf("x = %d at [%X]n", x, &x);printf("y = %d at [%X]n", y, &y);printf("z = %d at [%X]n", z, &z);} int main(int argc转载 2016-07-28 14:49:43 · 358 阅读 · 0 评论 -
C++ ofstream和ifstream用法
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器( 向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout转载 2016-06-22 09:18:28 · 285 阅读 · 0 评论 -
#pragma once与#ifndef #define #endif
#ifndef这种是最早期使用的方法,是基于语言的宏定义名字不能冲突的前提下的。这种方法不仅能保证同一个头文件不会被包含两次,也可以保证内容完全相同的两个文件也只能被包含一次。但是他优缺点,就是你的#ifndef 后面跟的宏名字和你程序中的其他宏名字发生了”撞车“,那么会出现以下两种后果第一种:file1头文件中有一个宏//file1.h#define BOOK_H //宏转载 2016-06-22 10:35:39 · 403 阅读 · 0 评论 -
C++静态库与动态库
什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接。回顾一下,将一个程序编译成可执行程序的步骤:图:编译过程静态转载 2016-06-28 10:19:24 · 325 阅读 · 0 评论 -
C++中公有继承、保护继承、私有继承的区别
公有继承时基类中各成员属性保持不变,基类中private成员被隐藏。派生类的成员只能访问基类中的public/protected成员,而不能访问private成员;派生类的对象只能访问基类中的public成员。私有继承时基类中各成员属性均变为private,并且基类中private成员被隐藏。派生类的成员也只能访问基类中的public/protected成员,而不能访问private成员转载 2016-07-05 13:38:40 · 267 阅读 · 0 评论 -
exit与return的深入辨析
1. exit用于结束正在运行的整个程序,它将参数返回给OS,把控制权交给操作系统;而return 是退出当前函数,返回函数值,把控制权交给调用函数。2. exit是系统调用级别,它表示一个进程的结束;而return 是语言级别的,它表示调用堆栈的返回。3. 在main函数结束时,会隐式地调用exit函数,所以一般程序执行到main()结尾时,则结束主进程。exit将删除进程使用的原创 2016-07-17 11:04:45 · 1083 阅读 · 0 评论 -
嵌入式—字节对齐
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特转载 2016-07-15 23:43:59 · 1611 阅读 · 0 评论 -
VS中包含目录、附加包含目录、附加库目录及附加依赖项
原创 2017-01-13 10:56:24 · 1081 阅读 · 0 评论