随笔分类 - C/C++
摘要:要看虚函数本身有没有实现。 存没有实现的纯虚函数,那这个基类是不能实例化的。继承这个基类的子类可以覆盖也可以不覆盖其虚函数。如果基类中的纯虚函数在子类中没有覆盖,那这个子类还是一个虚类,不能实例化的。
阅读全文
摘要:转载http://bbs.csdn.net/topics/70346371 编程中经常能遇到LNK2005错误——重复定义错误,其实LNK2005错误并不是一个很难解决的错误。弄清楚它形成的原因,就可以轻松解决它了。造成LNK2005错误主要有以下几种情况:一、重复定义局部变量可能存在两种情况:A、 对于一些初学编程的程序员,有时候会以为需要使用全局变量的地方就可以使用定义申明一下。其实这是错误的,全局变量是针对整个工程的。正确的应该是在一个CPP文件中定义如下:intg_Test;那么在使用的CPP文件中就应该使用:externintg_Test即可,如果还是使用intg_Test,那...
阅读全文
摘要:16位系统:long是4字节,int是2字节32位系统:long是4字节,int是4字节64位系统:long是8字节,int是4字节
阅读全文
摘要:一、sample#includeusing namespace std;void* test(void* pass){ return pass;}int _tmain(int argc, _TCHAR* argv[]){ char* a=(char*)malloc(sizeof(char)); a="a"; char* b = (char*)malloc(sizeof(char)); b=(char*)test(a); coutusing namespace std;class CBase{public: CBase(int a,long b,char...
阅读全文
摘要:转载http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832364.html各个容器有很多的相似性。先学好一个,其它的就好办了。先从基础开始。先看看他们的分类吧标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一个重型字符串。非标准关联容器hash_set、hash_multiset、hash_map和hash_multimap。(各容器成员对比见:【STL】各容器成员
阅读全文
摘要:转载http://www.cnblogs.com/riskyer/p/3217872.html 所谓虚函数,虚就虚在“推迟联编”或者“动态联编”上,一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被称为“虚”函数。而什么是动态联编呢? 编译程序在编译阶段并不能确切地知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要确切地知道将要调用的函数,要求联编工作在程序运行时进行,这种在程序运行时进行的联编工作被称为动态联编,或动态束定,又叫晚期联编;C++规定:动态联编是在虚函数的支持下...
阅读全文
摘要:一、编译期与运行期1)常数值在编译时就确定,变量值要到运行时才确定;2)局部变量相对于栈基址的偏移,编译时就确定,堆空间变量的相对位置也要运行时才确定;3)静态变量在用户空间的地址【虚拟地址】编译时就确定,而非静态变量运行时才确定;4)非虚函数的执行编译时就确定,而虚函数的执行运行时才确定;5)直接调用虚函数时,虚函数在虚表中的偏移(或索引)编译时就确定,而通过函数指针调用虚函数时,这个索引值运行时才确定.
阅读全文
摘要:转载http://www.blue1000.com/bkhtml/c151/2010-11/69613.htm一个类,有成员变量:静态与非静态之分;而成员函数有三种:静态的、非静态的、虚的。那么这些个东西在内存中到底是如何分配的呢?#include"iostream.h"class CObject{public: static int a; CObject(); ~CObject(); void Fun();private: int m_count; int m_index;};void CObject::Fun(){ cout<<"Fun\n&quo
阅读全文
摘要:转载http://www.rosoo.net/a/201203/15889.html一、#pragma pack(push,1)与#pragma pack(1)的区别这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。#pragma pack (n) 作用:C编译器将按照n个字节对齐。#pragma pack () 作用:取消自定义字节对齐方式。#pragma pack (push,1) 作用:是指把原来对齐方式设置压栈,并设新的对齐方...
阅读全文
摘要:一、注意两点1.C++中struct和class的语法是一致的,但public\private属性相反2.语法成份的嵌套:class嵌套class没有问题,class嵌套struct或者相反都是没有问题C++中struct和class的区别仅仅在于前者默认成员为Public而后者为Private
阅读全文
摘要:一、declspec#ifdef STATIC_LIBS #define DLL_API static#else #define DLL_API __declspec (dllexport)#endif __declspec(dllexport): 将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口。
阅读全文
摘要:1、STL中,请写出vector和list各自的优点缺点。请写出map的数据结构组织方式以及查找的时间复杂度vector 向量相当于数组,在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储。当存储的内容超过此分配空间时再进行整理的重新分配一块内存存储。优点: 不指定一块内存大小的数组的连续存储,既可以像数组一样操作,但可以对此数组进行动态操作。push_back()与pop_back(); 随机访问方便,即[]操作和vector.at(); 自动调整内存,节省空间缺点: 实现插入与删除操作效率低 ,只能...
阅读全文
摘要:构造函数不能声明为虚构函数。原因有2 : 1、虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。纯虚构函数: 纯虚函数是指不必再基类中定义,但必须在派上类中被覆盖的函数。其函数声明格式为virtual 函数名() = 0; 通常纯虚函数用来定义接口或抽象类
阅读全文
摘要:字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。 1. Little endian:将低序字节存储在起始地址 2. Big endian:将高序字节存储在起始地址例子:在内存中双字0x01020304(DWORD)的存储方式 内存地址4000&4001&4002&4003LE 04 03 02 01BE 01 02 03 04例子:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为 BE LE0x0000 0x12 0xcd0x0001 0x34 0xab0x0002 0xab 0x340x0003 0xcd 0x12x86系
阅读全文
摘要:一、Static全局变量和全局变量的区别 1)全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。从以上分析可以看出, 把局部变量..
阅读全文
摘要:转载http://blog.csdn.net/zdl1016/article/details/5941330STL的线程安全. 说一些关于stl容器的线程安全相关的话题。一般说来,stl对于多线程的支持仅限于下列两点:(貌似Effective STL中有描述)1.多个读取者是安全的。即多个线程可以同时读取一个容器中的内容。 即此时多个线程调用 容器的不涉及到写的接口都可以 eg find, begin, end 等.2.对不同容器的多个写入者是安全的。即多个线程对不同容器的同时写入合法。 但是对于同一容器当有线程写,有线程读时,如何保证正确? 需要程序员自己来控制,比如:线程A读容器某一项时,
阅读全文
摘要:转载http://www.cnblogs.com/this-543273659/archive/2011/08/02/2125487.html将构造函数,析构函数声明为私有和保护的,那么对象如何创建?已经不能从外部调用构造函数了,但是对象必须被构造,应该如何解决,麻烦大家帮忙说明,关于构造,析构函数声明为私有和保护时的用法???提出这个问题,说明你已经对c++有所思考了。从语法上来讲,一个函数被声明为protected或者private,那么这个函数就不能从“外部”直接被调用了。对于protected的函数,子类的“内部”的其他函数可以调用之。而对于private的函数,只能被本类“内部”的其
阅读全文
摘要:一、简单单链表先上代码Chain.h#includetemplateclass Chain;templateclass ChainNode{/*要将私有成员数据或函数暴露给另一个类,必须将后者声明为友元类。*/ friend class Chain;private: T data; ChainNode* link; };templateclass Chain{private: ChainNode* first;/*链表长度,即链表元素的个数*/ int n;public: Chain(){first=NULL;n=0;} ~Chain(); ...
阅读全文
摘要:转载http://www.cnblogs.com/scrat/archive/2012/06/25/2560904.html什么是僵尸进程 僵尸进程是指它的父进程已经退出(父进程没有等待(调用wait/waitpid)它),而该进程dead之后没有进程接受,就成为僵尸进程,也就是(zombie)进程。 僵尸进程是怎么样产生 一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。 在Linux进程的状态中,僵尸...
阅读全文
摘要:转载http://www.cnblogs.com/leoo2sk/archive/2009/12/11/talk-about-fork-in-linux.html给出如下C程序,在linux下使用gcc编译:1234567891011121314#include "stdio.h"#include "sys/types.h"#include "unistd.h"intmain(){pid_t pid1;pid_t pid2;pid1 = fork();pid2 = fork();printf("pid1:%d, pid2:%
阅读全文

浙公网安备 33010602011771号