摘要: 学习过C++基础课程的人,对重载函数的概念相对熟悉一些,但是对覆盖和隐藏就相对陌 生了,在编程技术的学习上,你会发现一个规律,很多知识点你都知道,但是一旦用起来, 就常常出错,为什么呢?笔者一直都在探索这个问题。。 重载函数有哪些特性呢? 《高质量C++/C编程指南》已经清晰的列出了重载函数的特性: (1)相同的范围(在同一个类中); (2)函数名字... 阅读全文
posted @ 2013-09-08 21:39 jiayouwyhit 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 本文转载至http://blog.csdn.net/hackbuteer1/article/details/7475622总结:(1)区分概念: 重载----同一个类中,相同的函数名字,不同的函数形参(与函数返回值类型的不同无关系;与函数 形参的个数、类型有关系;当形参个数、类型相同时,如一个函数的形参包含某类型的引用/指针,而另一个函数包含同类型形参的const 引用/指针,则二者可以被认为是重载); 覆盖----发生在子类与基类之间,子类与基类之间包含同名同参数的函数,且基类中该函数用virtual修饰时; 隐藏----发生在子类与基类之... 阅读全文
posted @ 2013-09-08 21:35 jiayouwyhit 阅读(341) 评论(0) 推荐(0) 编辑
摘要: 构造函数不能声明为虚函数,析构函数可以声明为虚函数,而且有时是必须声明为虚函数。不建议在构造函数和析构函数里面调用虚函数。1.构造函数不能声明为虚函数的原因是:解释一:所谓虚函数就是多态情况下只执行一个。而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象。如果构造函数设为虚函数,那么当你在构造父类的构造函数时就不得不显示的调用构造。还有一个原因就是为了防错,试想如果你在子类中一不小心重写了个跟父类构造函数一样的函数,那么你的父类的构造函数将被覆盖,也即不能完成父类的构造.就会出错。解释二:虚函数的意思就是开启动态绑定,程序会根据对象的动态类型来选择要调用的方法。然而在构造函数运行的时 阅读全文
posted @ 2013-09-08 21:16 jiayouwyhit 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 铁律一:最好不要在构造函数和析构函数中调用虚函数!构造派生类对象时,首先调用基类构造函数初始化对象的基类部分。在执行基类构造函数时,对象的派生类部分是未初始化的。实际上,此时的对象还不是一个派生类对象。析构派生类对象时,首先撤销/析构他的派生类部分,然后按照与构造顺序的逆序撤销他的基类部分。因此,在运行构造函数或者析构函数时,对象都是不完整的。为了适应这种不完整,编译器将对象的类型视为在调用构造/析构函数时发生了变换,即:视对象的类型为当前构造函数/析构函数所在的类的类类型。由此造成的结果是:在基类构造函数或者析构函数中,会将派生类对象当做基类类型对象对待。而这样一个结果,会对构造函数、析构函 阅读全文
posted @ 2013-09-08 16:39 jiayouwyhit 阅读(1918) 评论(0) 推荐(0) 编辑
摘要: 一般情况下如果自己不定义赋值构造函数及赋值操作符函数,C++会给生成默认的,对于基本数据类型一般没啥问题,但是对于指针或是对象了就有些问题,需要自己写。《C++ primer》关于自己定义派生类复制构造函数和赋值操作符有介绍。自己总结如下:如果没有必要自己写复制构造函数和赋值操作符,那就可以用系统默认的,能够很好的完成要求;但是一旦决定要自己显式定义,则该定义将完全覆盖默认定义。对派生类进行复制构造时,如果想让基类的成员也同时拷贝,就一定要在派生类复制构造函数初始化列表中显示调用基类复制构造函数(当然在函数体内将基类部分的值拷贝也是可以的,只不过它是先用默认构造函数初始化后再修改的基类成员变量 阅读全文
posted @ 2013-09-08 14:24 jiayouwyhit 阅读(2471) 评论(0) 推荐(0) 编辑