C++
文章平均质量分 57
zhliu1991
这个作者很懒,什么都没留下…
展开
-
重载、覆盖与隐藏
这几个概念都有一个共同点:函数名称相同,所以不免让人混淆,大致的区别如下:重载:必须在一个域中,函数名称相同但是函数参数不同,重载的作用就是同一个函数有不同的行为,因此不是在一个域中的函数是无法构成重载的,这个是重载的重要特征覆盖:覆盖指的是派生类的虚拟函数覆盖了基类的同名且参数相同的函数,既然是和虚拟函数挂钩,说明了这个是一个多态支持的特性,所谓的覆盖指的是用基类对象的指针或者引原创 2014-05-05 16:54:11 · 424 阅读 · 0 评论 -
可用NVI模式替换virtual函数继承方式
class Base{ public: void Foo(){ DoFoo1(); }//use DoFooX() private: virtual void DoFoo1(){ cout << "Base's DoFoo1" <<endl; } virtual void DoFoo2(){原创 2014-10-27 14:34:22 · 525 阅读 · 0 评论 -
typename的作用
一、与class的区别template原创 2014-09-16 15:41:19 · 1041 阅读 · 0 评论 -
Effectiv C++条款31 将文件间的编译依存关系降至最低 Handle Class和Interface Class完整实现
一、背景1.如果一个源文件以头文件的形式包含了其他文件,则它们之间便形成了一种“编译依存关系”;一旦被包含的文件(或这些文件包含的其他文件)被修改,则每一个包含该源文件的其他文件都必须重新编译。以“前置声明”代替“头文件包含”似乎是一个好办法,但是会遇到一些问题:对诸如string这样的头文件而言,正确的前置声明比较复杂,因为会涉及模板(string是个typedef而非类)。原创 2014-09-15 11:56:02 · 574 阅读 · 0 评论 -
覆盖继承的问题以及解决方法(条款33)
class Base { public: virtual void mf1() = 0; virtual void mf1(int); virtual void mf2(); void mf3(); void mf3(double); ... private: i原创 2014-09-15 15:27:11 · 291 阅读 · 0 评论 -
临时对象的来源
一、临时对象的来源主要有两个,一个是函数原创 2014-09-23 16:22:44 · 345 阅读 · 0 评论 -
求二维字符串数组里的元数个数
static const char* szBaseFieldArray[]={FIELD_BASE_INFO, FIELD_VIP}; static const uint32_t BASE_FIELD_COUNT = sizeof(szBaseFieldArray)/sizeof(szBaseFieldArray[0]);利用指针数组即可解析:sizeof(szBaseFie原创 2014-08-29 15:56:50 · 929 阅读 · 0 评论 -
通过传递类的成员变量的名字来对类的成员变量操作
class A { public: int x; int y; }; void f(int A::*member) { A a; a.*member=1; cout }int main(){ f(&A::y); while(1);} 如上所示原创 2014-09-12 10:00:35 · 455 阅读 · 0 评论 -
C++反射机制
原文链接 :http://blog.csdn.net/nighsen/article/details/6407017 反射这个特性在C++中是没有的。所谓反射,自己的认为就是通过一个名字就可创建、调用、获取信息等一系列的操作,这个在脚本语言里面是比较常见的,COM组件也类似,知道个ID名,就可以做很多的工作了。看看JAVA中的描述:JAVA反射机制是在运行状态中,对于任意一个类,都原创 2014-09-11 14:38:15 · 453 阅读 · 0 评论 -
类之间的转换
父类转换到子类使用static_cast父类转换到原创 2014-09-02 10:16:51 · 646 阅读 · 0 评论 -
Explicit——谨慎定义隐式类型转换函数
在查找别的资料的时候,看到这么一个关键字,以前都没见过觉得挺有用,于是找来More Effective C++进行学习总结一下。一 隐式转换 C++编译器能够在两种数据类型之间进行隐式转换(implicit conversions),它继承了C语言的转换方法。隐式把char——>int和从short——>double。转换可能会导致数据的丢失。自定义的类型时,你就可以有更多的原创 2014-09-22 14:49:20 · 379 阅读 · 0 评论 -
对象的初始化问题(effecive c++ 条款4)
一、使用成员初值列的方式对类进行初始化效率比较高class原创 2014-09-10 11:16:43 · 322 阅读 · 0 评论 -
函数指针的用法
#include #include "test.h"using namespace tt;typedef int (*func)(int x,int y); //声明变量int add(int x,int y){ return x+y;}int sub(int x,int y){ return x-y;}int mul(int x,int y){原创 2014-09-09 17:08:51 · 297 阅读 · 0 评论 -
写一个高效的swap函数
一、前提缺省版本的swap原创 2014-09-08 11:10:16 · 483 阅读 · 0 评论 -
Effective C++ 条款46 需要类型转换时请为模板定义非成员函数 实现代码
template class Rational;templateconst Rational doMultiply(const Rational& lhs, const Rational& rhs){ return Rational(lhs.getnumerator() * rhs.getnumerator(), lhs.getdenominator() * rhs.getdenom原创 2014-09-19 12:09:51 · 385 阅读 · 0 评论 -
虚函数继承、虚继承、虚析构函数、纯虚函数
1、什么是虚函数继承?原创 2014-04-29 11:18:13 · 903 阅读 · 0 评论 -
C++运算符号重载
一、为什么要在运算符返回值上原创 2014-04-26 16:29:42 · 425 阅读 · 0 评论 -
c++ 解决operator =自我赋值与申请空间失败的方法
直观的operator=是这样定义的: 1 class SampleClass 2 { 3 private: 4 int a; 5 double b; 6 float* p; 7 public: 8 SampleClass& operator= (const SampleClass& s) 9原创 2014-05-06 20:36:29 · 570 阅读 · 0 评论 -
特殊数据类型成员变量的初始化
有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:a. 常量型成员变量b. 引用型成员变量c. 静态成员变量d. 整型静态常量成员变量e. 非整型静态常量成员变量对于常量型成员变量和引用型成员变量的初始化,必须通过构造函数初始化列表的方式进行。在原创 2014-10-28 15:04:56 · 434 阅读 · 0 评论