摘要: 前言 非常感谢monkey_zx整理的#define命令的一些高级使用,本文主要对他的这篇文章做些补充,加深对部分宏的原理和用法的理解。特殊符号(1)#,表示将跟在它之后的参数转换为字符串。 例子:#define STR(x) #x 如:STR(amigo)等价"amigo"。(2)##,表示先分隔,然后强制连接前后两个参数。 例子:#define VAR_NAME(type, name) type type##_##name#define VAR_NAME1(type, name) type type##_name##name 如: VAR_NAME(int, a)等.. 阅读全文
posted @ 2014-03-11 21:34 helloamigo 阅读(534) 评论(0) 推荐(0) 编辑
摘要: 测试环境 平台:32位 编译环境:VS2008虚函数相关背景 虚函数的作用主要是实现了多态机制,即用父类型别的指针指向其派生类的实例,然后通过父类的指针调用派生类的成员函数,这种技术可以让父类的指针有“多种形态”。问题:从一个例子开始 假设有类继承关系如下: 问题:类Base、MyClass的大小? 结果:4和8?我们写个程序看看结果先! 1 #include 2 using namespace std; 3 4 class Base 5 { 6 public : 7 int a_ ; 8 virtual void FuncA() 9 {10 ... 阅读全文
posted @ 2014-03-10 22:59 helloamigo 阅读(780) 评论(0) 推荐(0) 编辑
摘要: 测试环境 平台:32位 编译环境:VS2008虚继承相关背景 如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的属性和方法(假设这些属性和方法是公有的且都是公有继承)。从设计角度讲,这个实现是错误的,它容易产生二义性且浪费内存空间。 虚继承可以解决这个问题,虚继承可以为最远的派生类提供唯一的基类成员,而不重复产生多次拷贝。问题:从一个例子开始 假设有虚继承结构如下,虚基类A中有int成员a_;B1虚继承自A,有int成员b1_;B2虚继承自A,有int成员b2_;D继承自B1、B2,有int成员d_。 在32位架构下,类A、B1、B2、D的大小?哎!... 阅读全文
posted @ 2014-03-09 00:18 helloamigo 阅读(788) 评论(0) 推荐(0) 编辑
摘要: 简介 boost::shared_ptr是可以共享所有权的指针。如果有多个shared_ptr共同管理同一个对象时,只有这些shared_ptr全部与该对象脱离关系之后,被管理的对象才会被释放。通过下面这个例子先了解下shared_ptr的基本用法: 1 #include 2 #include 3 #include 4 5 using namespace std; 6 7 class Book 8 { 9 private:10 string name_;11 12 public:13 Book(string name) : name_(name)14 {15... 阅读全文
posted @ 2014-03-01 22:12 helloamigo 阅读(17241) 评论(0) 推荐(3) 编辑
摘要: 简介 boost::scoped_ptr是一个比较简单的智能指针,它能保证在离开作用域之后它所管理对象能被自动释放。下面这个例子将介绍它的使用: 1 #include 2 #include 3 4 using namespace std; 5 6 class Book 7 { 8 public: 9 Book()10 {11 cout myBook(new Book());25 }26 cout class scoped_ptr : noncopyable 4 { 5 private: 6 7 T ... 阅读全文
posted @ 2014-02-28 22:45 helloamigo 阅读(12146) 评论(0) 推荐(4) 编辑
摘要: 下载 进入http://www.boost.org/,下载最新的源码包,我用的版本是1.55.0。解压 将其解压,我的解压目录是“D:\Program\open\boost_1_55_0”。编译打开VS2008,选择“Tools”(工具)->“Visual Studio 2008 command prompt”(命令提示),进入命令行界面。进入到“D:\Program\open\boost_1_55_0”,执行“bootstrap.bat”进行引导。引导成功之后在相同目录下会生成bjam.exe。执行如下命令进行编译: bjam stage --toolset=msvc-9.0 --wi 阅读全文
posted @ 2014-02-27 23:55 helloamigo 阅读(3892) 评论(0) 推荐(0) 编辑
摘要: C++风格的强制类型转换:const_cast,static_cast,dynamic_cast,reinterpret_cast。使用:xxx_cast (expression)const_cast说明:该运算符用来修改类型的const或volatile属性。 1 class TestA 2 { 3 public: 4 TestA() { } 5 public: 6 int m_data; 7 }; 8 9 void foo()10 {11 const TestA ta;12 //ta1.m_data = 100; //编译错误13 14 Te... 阅读全文
posted @ 2014-01-05 21:37 helloamigo 阅读(283) 评论(0) 推荐(0) 编辑