随笔分类 - C/C++
摘要:原文出处:http://blog.csdn.net/jcwKyl/article/details/3771059《Thinking in C++》volume 2第五章有这么一句话:Member template functions cannot be declared virtual.Curren...
阅读全文
摘要:原文出处:http://my.oschina.net/hnuweiwei/blog/280894目录[-]多态虚函数纯虚函数虚表一般继承(无虚函数覆盖)一般继承(有虚函数覆盖)多重继承(无虚函数覆盖)多重继承(有虚函数覆盖)多态多态性就是指同样的消息被类的不同的对象接收时导致的完全不同的行为的一种现...
阅读全文
摘要:出处:http://www.cnblogs.com/gnuhpc/1.简介这个机制是Private Implementation的缩写,我们常常听到诸如“不要改动你的公有接口”这样的建议,所以我们一般都会修改私有接口,但是这会导致包含该头文件的所有源文件都要重新编译,这会是个麻烦事儿。Pimpl机制...
阅读全文
摘要:原文来自:http://www.cnblogs.com/xloogson/p/3360847.html1.C++最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符1 template void swap ( T& a, T& b ) 2 { 3 T c(a); 4 a...
阅读全文
摘要:原博客:http://www.cnblogs.com/speedmancs/archive/2011/06/09/2076873.htmloperator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。这是C++扩展运算符功能的方法,虽然样...
阅读全文
摘要:explicit[英][ɪkˈsplɪsɪt][美][ɪkˈsplɪsɪt]adj.明确的,清楚的;直言的;详述的;不隐瞒的;看到上面的英文解释,我们应该就知道explicit构造函数是什么意思了:显式的构造函数!一、隐式构造函数如果C++类的构造函数有一个参数,那么在编译的时候就会有一个缺省的转换...
阅读全文
摘要:最近自己写着玩,写了一个这样的函数:void foo(const string& iStr) { for (int i = 0; i < iStr.length(); ++i) { string str = iStr.at(i); }}函数中间还涉及到的其他业务不管,问题在...
阅读全文
摘要:一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp]view plaincopyinta=100;intb=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。[c-sharp]view pla...
阅读全文
摘要:1.定义向下类型转换:从父类转换为子类向上类型转换:从子类转换为父类2.区别和危险性1)一般来讲,向上类型转换都是安全的,例如:Base base;Device dev;base = dev; ←向上数据转换2)向下类型转换是危险的,因为子类可能存在一些父类其他不存在的个性(增加了成员变量和函数)...
阅读全文
摘要:1.当析构函数为虚函数时,其所有派生类的析构函数都将自动成为虚函数(不管是否被标记为virtual)。2.当基类的析构函数为虚函数时,如果对子类调用析构函数时,程序会先调用派生类的析构函数,然后再去调用基类的析构函数。但如果基类的析构函数不是虚函数时,那么只会调用基类的析构函数。例:class Ba...
阅读全文
摘要:同事去面试的时候的问题:测试一下发现:在同时存在int*和void*的重载函数时,vs2010的环境下,优先匹配void* 1 #include 2 using namespace std; 3 4 class Test{ 5 public: 6 int foo(void* y...
阅读全文
摘要:插入的数目为num,如果比head小,则插在链表头;如果比链表中元素都大,则插在结尾;否则插在链表中;代码如下: 1 Link* Link::Add(Link* pLink, int num) { 2 Link *p1,*p2; 3 p1 = pLink; 4 Link *p...
阅读全文
摘要:代码实现: 1 Link * Link::remove(Link* pLink, int num) { 2 Link *p1,*p2; 3 p1 = pLink; 4 // 查找需要删除的链表的节点 5 while((p1->id != num) && (p1...
阅读全文
摘要:利用类实现链表的创建 1 #include 2 3 using namespace std; 4 5 class Link { 6 public: 7 Link() {} 8 Link *_pNext; 9 void Create();10 void Output...
阅读全文
摘要:在网上看到一段贪吃蛇程序,自己心痒下了下来又稍微做了一点修改。没有用面向对象的方式来进行封装,下次准备试试。需要在windows环境下进行编译 1 #include 2 #include 3 #include 4 #include 5 #include 6 7 using names...
阅读全文
摘要:现在有这样一个问题:针对一个long类型的变量,我们想把它打印成为32位显示。 1 #include "stdio.h" 2 3 int main() { 4 long i =0xa; 5 6 printf("%016X\n", i); 7 printf("%016lX\n", i); 8 printf("%016llX\n", i); 9 10 return 0;11 }针对上面的3个不同输出,我们运行,可以得到下面的结果:svpm-dev# gcc practise.c -o practisesvpm-dev#
阅读全文
摘要:最开始纯粹为了好玩,写了这样一段程序:for(int i = 0; i < 10; i++);然后欢乐的运行:gcc practise.c -o practise我擦咧,出现了这个:practise.c:10: error: ‘for’ loop initial declarations are only allowed in C99 modepractise.c:10: note: use option -std=c99 or -std=gnu99 to compile your code好吧,第二行给出了答案,在for文中定义变量只有在C99标准后才支持的,古老的编译器啊。果断改之:
阅读全文
摘要:题目: 写一个函数,返回它自身,方法用C或者C++即可。方法一: 用C++中仿函数的方法,来实现返回自身的引用。 1 #include<iostream> 2 using namespace std; 3 4 class Fang { 5 public: 6 Fang& operator()(){ 7 cout << "a" <<endl; 8 return *this; 9 }10 };11 12 int main() {13 Fang F;14 F()()();15 F.operator()()();16 1...
阅读全文
摘要:其实同事已经对C++0X中的完美转发有了很好的理解,在这里我只是在自己的基础上衍生的一些理解加上去同事博客C++完美转发地址参考:http://www.cnblogs.com/alephsoul-alephsoul/archive/2013/01/10/2853900.html引言 其实完美转发,其实就是在调用了函数的基础上,能够相当于调用第二个函数,那么这个函数中的参数就完美转发给了第二个函数。转发方式一:非常量左值引用 1 #include <iostream> 2 using namespace std; 3 4 void F(int a1, int a2, int a3)
阅读全文
摘要:其实没有特意的想去研究研究C++的左值与右值,但是学习小组在研究引用的时候,发现右值引用这个大坑,而右值引用又是C++11才提出的,看了看,还是总结下一、左值与右值的定义 在不同的C++标准里,对左值和右值的定义是有所不同的。C++03版: ①对于一个表达式,其不是左值就是右值; ②左值是对象(指针,对象实例)或者函数(比如返回引用的函数,这里有一点很重要只有声明没有初始化的就不能成为左值,比如char* p;初始化为空*p不是左值,因为*p不是对象)。一些右值也是对象(另外一些右值是宏定义的常量、整形字面量、字符串字面量、浮点数字面量等); ③一些内建的操作符和函数调用会产生左值。E...
阅读全文