旧文章(C++论述)
simpleman7210
熟悉Cpp和Java编程多年08年信主2011年来深圳
展开
-
继承和对象自然增长
继承和对象自然增长C++中类的继承,是具有自然增长效果的。如果基类是Base,继承类是Derived,那么创建一个Derived类的实例b,在地址空间上,b的前面部分,刚好可以视为另一个Base的实例(a),后面才是继承所带来的扩展数据部分。所以继承具有自然增长效果(有时我也说成净增长或者净扩展)。C++的继承绝不会破坏基类的数据结构,这可以肯定是一个基本原则。因为如此,所以C++对象可以安全原创 2013-07-15 08:04:30 · 541 阅读 · 0 评论 -
关于C++的一些文章
早些年我写了一些关于C++的一些文章。这些文章是我学习C++的一些总结。我把它们贴出来,希望对C++初学者,或对底层技术感兴趣的人有所帮助。这些文章涉及可变参数,虚函数,构造函数和析构函数,多重继承等。有些论述我没有完成,如RTTI,异常处理。尽管如此,我希望已写的部分对C++的学习者有益处,如果确实对你有帮助,我将为你高兴。有不准确或不清楚的地方,欢迎一起讨论。原创 2013-07-15 07:56:03 · 709 阅读 · 0 评论 -
构造函数和析构函数
构造函数和析构函数构造函数提供了一种机制,通过它有机会完成必要的初始化工作,从而使对象成为有意义的存在物,而不仅仅只是一块原始的空间。但是,我们逐渐了解到,构造函数具有的地位,不仅对于用户(程序员),对于编译器履行职责也极为重要。通过这个机制,它让C++的一些基本的特性,如继承、多态得到了正确的贯彻和表现。首先不难理解的一点是在构造函数中,要确保基类对象的正确构造,如果是从基类原创 2013-07-15 08:14:56 · 613 阅读 · 0 评论 -
成员函数和this指针
成员函数和this指针类的成员函数和一个普通的(全局)函数可以认为没有什么差别。对于编译器来说,经过名称处理后(利用命名空间、类名、参数等信息进行技术性处理,使函数名称内部唯一),一个成员函数其实就是一个普通函数,在编译后的代码区域有着确定的函数体和函数入口。最大的差异发生在调用时,对于成员函数,编译器将隐含push this指针,this指针指向对象的地址(对象可能位于栈上或堆上或全局数据区原创 2013-07-15 08:05:54 · 826 阅读 · 0 评论 -
多态和虚函数
多态和虚函数在C++中,多态是通过虚函数实现的。基类如果把一个函数声明为虚的(virtual),就表明继承类可以覆盖(override)这个函数(从而表现不同的行为,呈现出多态性)。对于每一个有虚函数的类,或者覆盖了一个或多个基类虚函数的继承类,可认为有一个与之关联的虚函数表(v-table)。v-table表中的每一项(slot)中存储的是适当的函数指针。C++编译器在编译时原创 2013-07-15 08:09:11 · 553 阅读 · 0 评论 -
可变参数与参数进栈顺序
可变参数与参数进栈顺序C支持可变参数的函数,这里的意思是C支持函数带有可变数量的参数,最常见的例子就是我们十分熟悉的printf()系列函数。我们还知道在函数调用时参数是自右向左压栈的。如果可变参数函数的一般形式是:f(p1, p2, p3, …)那么参数进栈(以及出栈)的顺序是:…push p3push p2push p1call fpop p1pop p原创 2013-07-15 08:02:23 · 991 阅读 · 0 评论 -
参数传递和返回值
参数传递和返回值对于原始类型(或称基本类型),如int, char, float, 指针 等,参数传递和返回值不会碰到什么难以理解的问题。能引起关注的焦点是,当我们把对象作为参数传递,或者返回一个对象时,这里面发生了什么?我个人觉得,“返回一个对象”的说法或概念尤其难以理解。例如函数f()返回一个对象(类A的实例):A a;a = f(); // 或者:f().f1()原创 2013-07-15 08:16:35 · 690 阅读 · 0 评论 -
多重继承
多重继承在面向对象的领域中,对于多重继承的意义、是否需要在C++引入是有争论的(是的!多重继承在纯粹的对象思想看来有些怪异)。基本上撇开对于它的意义的探究,在下面着重阐述的是C++中多重继承的实现技术,以解释一些看来不易理解的地方。考虑一个类C同时继承类A和类B。那么一个c对象(C的实例)将既包含一个a对象(A的实例),也包含一个b对象(B的实例)。我们知道,在单继承情况下,继承对象是原创 2013-07-15 08:18:23 · 1094 阅读 · 0 评论