`
文章列表
面试时被问到了虚析构函数的使用,特此记录   首先我们写两个类: #ifndef CLX_H #define CLX_H #include <iostream> class ClxBase { public: ClxBase() {std::cout << "clx_base has been created" << std::endl;} virtual ~ClxBase() {std::cout << "clx_base has been destroyed" <&l ...
首先,显示出ppt2007的控件工具栏 Office按钮->powerpoint选项->常用->powerpoint首选使用选项->在功能区域显示“开发工具”选项卡,选中->确定!   然后,插入控件播放视频      这种方法就是将视频文件作为控件插 ...
1. 类中定义的静态变量在编译时没有出错,但是在链接时出现错误,原因是该静态变量没有初始化。 class Obj { public:     //... private:     static vector<string> vstr; };   vector<string> Obj::vstr;   这样在别的地方就可以使 ...

c++的学习笔记

  在网上看到了一篇c++的学习笔记不错,拿过来跟朋友们分享。 原文地址为http://www.cnblogs.com/maowang1991/p/3290321.html   1.struct成员默认访问方式是public,而 class默认访问方式是private! 2.exit函数终止程序执行会调用析构函数 ,abort函数终止程序不会调用析构函数! 3.静态局部变量直到程序终止时才退出! 4.通过public 函数返回 private成员的引用有可能会破坏类的封装 ,造成外部变量可以改变类私有成员值! 5.常量对象只能调用常量成员函数,常量成员函数可以有 ...
我们在做c++容器的元素删除时,需要使用迭代器,并且调用erase方法时,必须传入迭代器的指针位置, 所以在删除操作进行判断满足条件删除时,将变得较为麻烦。 项目中通用解决思路一: 遍历vector向量,记录满足条件的迭代指针的位置,看做成索引计数存入vector<int>中,并且这个顺序一定是由前向后的,而如果我们按照如下规定删除,会有异常, vector<int> index; vector<XXX> vt; vector<XXX>::iterator it = vt.begin(); for(int i=0; i<ind ...
       学习,了解汇编语言的工作机制和编写流程,有助于我们对程序的执行有一个比较清晰的认识。        主要的过程就是寻找能够存放数据的内存地址,将数据存放至这个地址之上,取出内存中数据至寄存器,寄存器经过计算后写回内存。        需要清楚的是,调用者知道被调用的函数有几个参数,调用者分配内存空间,而只有被调用的函数知道其内部有几个局部变量,函数分配内存空间。        还需要清楚的是,局部变量的入栈顺序依次为由高到低,而函数参数在内存中的分配(第一个参数总是在最低地址处),即由低至高分配,这样做的好处是,当参数为变长参数时,其栈指针总能指向函数的第一个参数。   ...
今天在写程序时,发现了一个全局变量引用时的连接错误,大概意思是为重复定义。 在.h文件中,定义了一个变量,而这个.h文件被多个.c文件引用,在链接时出现该变量被重复定义的错误。原因很简单,在.c文件中,均把这个变量看作是自身的全局变量,故出现上述错误。   若想引用别的.c文件中定义的全局变量,则需在想引用该变量的.h文件中加入extern关键字声明该变量,进行变量的使用。   然后,想想原先做过的项目中,用到过extern 关键字,详细说明为http://www.cnblogs.com/luliang/archive/2008/08/21/1272746.html       ...
我们在考虑数据前后交换的问题时,若middle指针的位置小于中位数,即后方移动的数据多于前方,故需要将前方数据先进行备份,再将后方数据移动至front指针位置,最后将先前备份的数据拷贝回剩余的数据结构中。 这是一种通用的解决方案。着重理解rotate1方法。注意内存位置的移动和计算(核心思想)。memmove方法与memcpy方法相似,不同的是,目标和源 有重叠时,其能够正常工作。 #include <iostream> #include <string.h> using namespace std; void rotate1(void *front, ...

字符串数组解惑

在整型和字符串类型的读取地址的过程中,代码如下所示:   int a[2][3] = {{1,2,3}, {4,5,6}}; cout << a << endl; cout << a[1] << endl; cout << &a[1][1] << endl; cout << endl; char b[3][3] = {{'A','A','A'}, {'B','B','B'}, {'C','C','\0'}}; cout << b << endl; cout ...
在修改字符串时,我们需要将字符串指针的地址传入至函数中,如下:   void print(char *str, char **strAddr) { str++; cout << str << endl; *strAddr = str; }     即改变指针指向的位置,调用过程如下所示: char *a = "abcdefg"; print(a, &a); cout << a << endl;   结果如下:      
来自网易的一道看似简单的笔试题 题目:要求以线性时间复杂度实现斐波那契数列。 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 。。。。。。   众所周知的斐波那契实现方式为递归实现: int feb1(int n) { t1++; if(n == 0 || n == 1) return 1; return feb1(n-1) + feb1(n-2); } 当n=25时, 迭代次数为242785 。 关于其复杂度的解释比较麻烦,详见http://www.cnblogs.com/python27/archive/2011/12/09/2282 ...
是skype电话面试,先行记录下来,总共有两道: 1. 通过栈的操作实现队列的操作: 即 用栈的基本方法push  pop 实现 出队和入队的方法 难点在于在不给出提示的情况下,能不能想出使用两个栈来实现队列操作。   (1) 先将stack ...
首先,有必要了解下记事本文件的几种编码方式:     四种常见文本文件编码方式研究 ANSI、UNICODE 、UNICODE big endian、UTF-8四种格式编码存在差别,简要介绍如下: ANSI编码: 无文件头(文件编码开头标志性字节)     ANSI编码字 ...
对于上一篇 《java中io各种流的关闭顺序》的补充   按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。 节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader. 处理流:是 ...
  关闭该流并释放与之关联的所有资源。在关闭该流后,再调用 read()、ready()、mark()、reset() 或 skip() 将抛出 IOException。关闭以前关闭的流无效。  public void close() throws IOException { synchronized (lock) { if (in == null) return; in.close(); in = null; cb = null; } }   一般情况下是:先打开的后关闭 ...
Global site tag (gtag.js) - Google Analytics