博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2012年10月1日

摘要: 一、模板定义:1. 模板形参表不能为空。2. 模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明。3. 使用函数模板时,可以由编译器去推导出实际模板实参;但是使用类模板时,必须为模板形参显式指定实参。4. 模板形参遵循常规名字屏蔽规则。与全局作用域中声明的对象、函数或类型同名的模板形参会屏蔽全局名字。5. 模板类型形参可以用于指定返回类型或函数形参类型,以及在函数体中用于变量声明或强制类型转换。6. 在函数模板形参表中,关键字typename和class具有相同的含义,可以互换使用,但是,关键字typename是作为C++的组成部分加入到C+ 阅读全文

posted @ 2012-10-01 14:11 神の大司命 阅读(501) 评论(0) 推荐(0)

2012年9月27日

摘要: 1. 示例程序: 1 class A 2 { 3 public: 4 int num; 5 virtual void f(); // 去掉此句:4, 16 6 protected: 7 private: 8 }; 9 10 class B : virtual public A // 去掉virtual:8, 1211 {12 public:13 int dog;14 virtual void g(); // 改为f():8, 16(这里尤其要注意)15 protected:16 private:17 };18 19 int main() // 不变:8, 202... 阅读全文

posted @ 2012-09-27 16:06 神の大司命 阅读(197) 评论(0) 推荐(0)

2012年9月26日

摘要: 1. 实现技术的挑战:要找到一个足够有效的方法,将istream和ostream各自维护一个ios subobject,折叠成为一个由iostream维护的单一ios subobject,并且还可以保存base class和derived class的指针之间的多态指定操作。2. 一种实现方法:class如果内含一个或多个virtual base class subobject,像istream那样,将被分割为两部分:一个不变局部和一个共享局部。不变局部中的数据,不管后继如何衍化,总是拥有固定的offset,所以这部分数据可以被直接存取。至于共享局部,所表现的就是virtual base cl 阅读全文

posted @ 2012-09-26 22:31 神の大司命 阅读(245) 评论(0) 推荐(0)

摘要: 1. 示例程序1: 1 class A 2 { 3 public: 4 void f(); 5 protected: 6 private: 7 }; 8 9 class B : virtual public A10 {11 public:12 protected:13 private:14 };15 16 class C : virtual public A17 {18 public:19 protected:20 private:21 };22 23 class D : public B, public C24 {25 public:26 protected:27 private:... 阅读全文

posted @ 2012-09-26 16:47 神の大司命 阅读(195) 评论(0) 推荐(0)

摘要: 1. 在混合类型的算数表达式中:int ival = 3;double dval = 3.14;// 最宽的数据类型成为目标转换类型,ival被提升为double类型3.0ival + dval; 2. 用一种类型的表达式赋值给另一种类型的对象:// 目标转换类型是被赋值对象的类型ival = dval;3. 把一个表达式传递给一个函数,表达式类型与形式参数类型不相同:// 目标转换类型是形式参数的类型extern double sqrt(double);sqrt(2); // 2被提升为double类类型2.04. 从一个函数返回一个表达式的类型与返回类型不相同:// 返回表达式类型自动转换 阅读全文

posted @ 2012-09-26 14:38 神の大司命 阅读(733) 评论(0) 推荐(0)

摘要: 1. 时间复杂度:一种非形式化论证:快速排序在每层递归中都执行了O(n)次操作,而总计有O(logn)层递归。因此,时间复杂度为:O(nlogn)更精确的论证:通过递推关系。若用T(n)表示解决规模为n的问题所需的时间,那么T(1) = O(1),且T(n) = 2T(n/2) + O(n),因此,T(n) = O(nlogn)2. 空间复杂度:快速排序在每层递归中需要栈空间O(1),而总计有O(logn)层递归。因此,空间复杂度为:O(logn) 阅读全文

posted @ 2012-09-26 14:37 神の大司命 阅读(210) 评论(0) 推荐(0)

2012年9月25日

摘要: 1. 带参宏举例:#define MAX(a, b) ((a) > (b) ? (a) : (b))2. 注意,#是字符串化的意思,把跟在后面的参数转换成一个字符串:#define FUN(a) "a"FUN(345)将被替换成"a",因为""双引号中的字符不被当做形参。3. 带参宏定义中#的用法:#define STR(str) #str这里的#用于把宏定义中的参数两端加上字符串的"",举例:STR(my#name)将被替换成:"my#name"4. 带参宏定义中##的用法:#defin 阅读全文

posted @ 2012-09-25 22:02 神の大司命 阅读(1209) 评论(0) 推荐(0)

摘要: 1. 如下例程: 1 class A 2 { 3 public: 4 virtual void fun() = 0; // 纯虚函数 5 protected: 6 private: 7 }; 8 9 /* 注意:即使有默认实现,类A仍然是抽象类,不能被实例化 */10 void A::fun() // 纯虚函数的默认实现11 {12 std::cout << "hello A::fun()" << std::endl;13 }14 15 class B : public A16 {17 public:18 virtual void fun();19 阅读全文

posted @ 2012-09-25 20:00 神の大司命 阅读(952) 评论(0) 推荐(0)

摘要: 1. 如果声明普通成员函数,但不定义,不会有错误,如下例: 1 class A 2 { 3 public: 4 void fun(); 5 protected: 6 private: 7 }; 8 9 int main()10 {11 A a;12 13 return 0;14 }2. 如果声明成员函数为虚函数,但不定义,编译出错,提示无法解析符号,如下例: 1 class A 2 { 3 public: 4 virtual void fun(); 5 protected: 6 private: 7 }; 8 9 // error LNK2001: 无法解析... 阅读全文

posted @ 2012-09-25 19:08 神の大司命 阅读(190) 评论(0) 推荐(0)

摘要: 1. 如下程序: 1 int main() 2 { 3 int v[3][4] = { {1, 2, 3, 4}, 4 {5, 6, 7, 8}, 5 {9, 10, 11, 12} }; 6 int z[4] = {21, 22, 32, 24}; 7 8 int a[4] = v[1]; // error: error C2075: 'a' : array initialization needs curly braces 9 10 int (* b)[4] = v[1];... 阅读全文

posted @ 2012-09-25 18:36 神の大司命 阅读(454) 评论(0) 推荐(0)