上一页 1 2 3 4 5 6 7 8 9 10 ··· 14 下一页
摘要: 铁律一:最好不要在构造函数和析构函数中调用虚函数!构造派生类对象时,首先调用基类构造函数初始化对象的基类部分。在执行基类构造函数时,对象的派生类部分是未初始化的。实际上,此时的对象还不是一个派生类对象。析构派生类对象时,首先撤销/析构他的派生类部分,然后按照与构造顺序的逆序撤销他的基类部分。因此,在运行构造函数或者析构函数时,对象都是不完整的。为了适应这种不完整,编译器将对象的类型视为在调用构造/析构函数时发生了变换,即:视对象的类型为当前构造函数/析构函数所在的类的类类型。由此造成的结果是:在基类构造函数或者析构函数中,会将派生类对象当做基类类型对象对待。而这样一个结果,会对构造函数、析构函 阅读全文
posted @ 2013-09-08 16:39 jiayouwyhit 阅读(1922) 评论(0) 推荐(0) 编辑
摘要: 一般情况下如果自己不定义赋值构造函数及赋值操作符函数,C++会给生成默认的,对于基本数据类型一般没啥问题,但是对于指针或是对象了就有些问题,需要自己写。《C++ primer》关于自己定义派生类复制构造函数和赋值操作符有介绍。自己总结如下:如果没有必要自己写复制构造函数和赋值操作符,那就可以用系统默认的,能够很好的完成要求;但是一旦决定要自己显式定义,则该定义将完全覆盖默认定义。对派生类进行复制构造时,如果想让基类的成员也同时拷贝,就一定要在派生类复制构造函数初始化列表中显示调用基类复制构造函数(当然在函数体内将基类部分的值拷贝也是可以的,只不过它是先用默认构造函数初始化后再修改的基类成员变量 阅读全文
posted @ 2013-09-08 14:24 jiayouwyhit 阅读(2484) 评论(0) 推荐(0) 编辑
摘要: 本文转载于http://blog.csdn.net/chenyiming_1990/article/details/8981868新加内容提醒:关于利用virtual函数实现动态绑定/多态,需要尤其注意的一点是: 必须保证基类和派生类中对应的虚函数除了函数名称一致之外,还必须保证形参和返回值也完全一致! 若基类和派生类中仅仅是虚函数的函数名称一致,但是形参不一致,则无法实现动态绑定/多态!实际上造成的结果是:派生类中对基类中对应的函数进行了隐藏,在派生类中只能访问派生类中的该函数,在基类中只能访问基类中对应的同名函数。针对基类和派生类中的虚函数有没有默认实参问题进行讨论。1.基类虚函数不带.. 阅读全文
posted @ 2013-09-07 17:41 jiayouwyhit 阅读(555) 评论(0) 推荐(0) 编辑
摘要: 不能作为重载函数的调用的依据是( )A.参数个数 B.参数类型 C.函数类型 D.函数名称答案为C.重载函数的定义是:出现在相同作用域中的两个函数,如果具有相同的函数名字而形参的类型或者个数不同,则称为重载函数。对比定义,则A,B,D均为重载函数调用的依据。有人解释C选项时,说是因为“函数类型==函数返回值的类型”。这个解释是牵强附会的,尽管说“不能将函数返回值类型不同而作为函数重载的依据”,但是,由此而说“函数类型==函数返回值的类型”,这个在本质上是错误的。关于函数类型,参见资料:http://blog.csdn.net/amossavez/ar... 阅读全文
posted @ 2013-09-07 10:17 jiayouwyhit 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 本文转自http://blog.csdn.net/whyglinux/article/details/602329类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const。所以 const 关键字对成员函数的行为作了更加明确的限定:有 const 修饰的成员函数(指 const 放在函数参数表的后面,而不是在函数前面或者参数表内),只能读取数据成员,不能改变数据成员;没有 const 修饰的成员函数,对数据成员则是 阅读全文
posted @ 2013-09-05 15:35 jiayouwyhit 阅读(313) 评论(0) 推荐(0) 编辑
摘要: 第一:private, public, protected 访问标号的访问范围。假如我们约定:类内部-----指的是当前类类型的定义中,以及其成员函数的声明和定义中;类外部-----指的是不在当前类“类内部”的地方,如主函数中,其他不具有继承关系的类定义中。友元函数----包括3种:设为友元的普通的非成员函数;设为友元的其他类的成员函数;设为友元类中的所有成员函数。private:只能在:(1)当前类的类内部;(2)友元函数中使用。protected:只能在:(1)当前类的类内部;(2)在当前类的派生类的类内部中;(3)该类的友元函数中使用。public:可以在任意地方使用。例如:可以被1.该 阅读全文
posted @ 2013-09-04 16:12 jiayouwyhit 阅读(349) 评论(0) 推荐(0) 编辑
摘要: 本文转自http://www.programlife.net/cpp-explicit-keyword.html。其实explicit主要用于防止隐式转换,用于修饰构造函数、复制构造函数[注意:一般推荐对构造函数使用explicit修饰,而对赋值构造函数不推荐使用explicit修饰]。比如,下面的代码编译不会出错:#include using namespace std;class Demo{private: int value;public: Demo():value(0){} Demo(int val):value(val){} Demo(const Demo& d):value 阅读全文
posted @ 2013-09-04 15:17 jiayouwyhit 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 1、使用static类的优点: (1)避免与其他类的成员或者全局变量冲突 (2)可以封装 (3)阅读性好 2.static 数据成员独立于该类的任意对象而存在 static数据成员的类型可以是该成员所属的类类型。非static成员被限定声明为其自身类对象的指针或引用。 class Bar{ public: // private: static... 阅读全文
posted @ 2013-09-02 13:20 jiayouwyhit 阅读(718) 评论(0) 推荐(0) 编辑
摘要: 本文转自http://blog.csdn.net/lwbeyond/article/details/6202256一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp]view plaincopyinta=100;intb=a;而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。[c-sharp]view plaincopy#includeusingnamespacestd;classCExample{private: inta;public://构造函数 CExample(intb) {a=b; 阅读全文
posted @ 2013-09-02 00:13 jiayouwyhit 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 1. 函数调用约定 关于 C/C++ 函数调用约定,大多数时候并不会影响程序逻辑,但遇到跨语言编程时,了解一下还是有好处的。 VC 中默认调用是 __cdecl 方式,Windows API 使用 __stdcall 调用方式,在 DLL 导出函数中,为了跟Windows API 保持一致,建议使用 __stdcall 方式。 调用约定跟堆栈清除密切相关。如果写一个汇编函数,给 C/C++ ... 阅读全文
posted @ 2013-08-28 23:07 jiayouwyhit 阅读(689) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 10 ··· 14 下一页