随笔分类 - C++ OO研究
摘要:Java的反射机制很酷, 只需知道类的名字就能够加载调用. 这个功能很实用, 想象一下, 用户只需指定类的名称, 就可以动态绑定类型, 而且只需通过字符串指定, 字符串的使用可以使得用户的修改只需修改一个配置文件就行, 仅仅修改配置文件, 连重新编译都不需要. 喔噢噢, 这种做法将代码的解耦程度做到
阅读全文
摘要:题目:用C++设计一个不能被继承的类。 分析:这是Adobe公司2007年校园招聘的最新笔试题。这道题除了考察应聘者的C++基本功底外,还能考察反应能力,是一道很好的题目。 在Java中定义了关键字final,被final修饰的类不能被继承。但在C++中没有final这个关键字,要实现这个要求还是需
阅读全文
摘要:C++2.0以后全面支持虚函数与虚继承,这两个特性的引入为C++增强了不少功能,也引入了不少烦恼。虚函数与虚继承有哪些特性,今天就不记录了,如果能搞了解一下编译器是如何实现虚函数和虚继承,它们在类的内存空间中又是如何布局的,却可以对C++的了解深入不少。这段时间花了一些时间了解这些玩意,搞得偶都,不
阅读全文
摘要:独一无二 静态成员变量 作者:HolyFire 我们学习C++的时候知道静态变量的特性,他不是临时变量,在编译期间就已经产成。用一个例子就能说明问题。 #include <iostream> using namespace std; class A{ public: A(){ cout << "Ca
阅读全文
摘要:void MyProgressBar::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { // -------------------- 取数据,测试数据 --------------------------------- ...
阅读全文
摘要:前言 当类没有成员变量的情况下, 类首地址有4个字节的空间, 这里可以放我们模拟出来的虚表入口地址. 当类有成员变量的情况下, 类首地址就是成员变量, 所以, 为了模拟虚表实现, 需要在成员变量前, 再定义一个int型变量, 用来存放模拟的虚表入口地址. 现在还得不到虚析构函数的地址, 暂时按照非虚
阅读全文
摘要:哈哈,从M$ Visual C++ Team的Andy Rich那里又偷学到一招:VC8的隐含编译项/d1reportSingleClassLayout和/d1reportAllClassLayout 。看个复杂的例子吧(如下),现在假设我们想知道Derived类的对象布局,怎么办? 在Projec
阅读全文
摘要:白杨http://baiy.cn “在正确的场合使用恰当的特性” 对称职的C++程序员来说是一个基本标准。想要做到这点,首先要了解语言中每个特性的实现方式及其开销。本文主要讨论相对于传统 C 而言,对效率有影响的几个C++新特性:编译时开销运行时开销相关文档:C++编码规范与指导C++异常机制的实现...
阅读全文
摘要:现在我们有这样一坨代码: [cpp] view plaincopy std::vector<int> arr; // ... for(std::vector<int>::iterator iter = arr.begin(); iter != arr.end(); ++iter) { // ...
阅读全文
摘要:Wrote by mutouyun. (http://darkc.at/cxx-get-the-name-of-the-given-type/) 地球人都知道C++里有一个typeid操作符可以用来获取一个类型/表达式的名称: [cpp] view plaincopy std::cout << ty
阅读全文
摘要:RTTI是"Runtime Type Information"的缩写,意思是:运行时类型信息.它提供了运行时确定对象类型的方法. 最近在写的一些东西,不想使用MFC之类的框架,但是却在很多地方需要根据名称确定指针的转换类型或者利用抽象工厂生产抽象的类对象指针... 我很不喜欢不容易维护且难看的"sw
阅读全文
摘要:struct和class区别与联系关于使用大括号初始化class和struct如果定义了构造函数的话,都不能用大括号进行初始化如果没有定义构造函数,struct可以用大括号初始化。如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。关于默认访问权限class中默认的成员访问...
阅读全文
摘要:参考一:C++的反射 C++语言本身是不支持反射的,但实际应用中总是会有将对象序列化的需求,总不可能C++不支持,我们就不用C++了,既然发明C++的大师们没有考虑这个,那我们只有自己动手了,毛主席说过“自己动手,丰衣足食”!天生限制C++语言本身不支持反射机制,但C++对象总是要序列化的,序列化...
阅读全文
摘要:Java的反射机制是在程序运行时,能够完全知道任何一个类,及其它的属性和方法,并且能够任意调用一个对象的属性和方法。这种运行时的动态获取就是Java的反射机制。其实这也是Java是动态语言的一个象征。用一句话来概括反射就是:加载一个运行时才知道的类以及它的完整内部结构。---------------...
阅读全文
摘要:Protected Functions 是理解OO的难点和关键private和public函数都好理解,这里就不多说了,夹在中间的prortected却有许多精妙之处,说说我的几个疑问和看法:1. 通常用于子类扩展父类的功能的时候用,即类库程序员可以,但客户程序员不得使用。所以程序员一旦偷懒,不写子...
阅读全文
摘要:多态性与将实现多态的函数的访问限定符没有任何关系,private 函数仍然可以实现多态,它的指针仍然位于vtbl中,只不过该函数的多态一般只能在基类的内部由其他非虚函数调用该函数的时候反映出来,访问限定符仅仅限制外部对类的成员的访问权限,它并没有破坏以下规则:通过基类指针或引用调用成员函数时,如果该...
阅读全文
摘要:我的几种源代码标识1. OO 表示对整个项目OO的架构理解,或许有可能被重新组织2. Important 表示当前语句是整个项目功能的关键调用3. good 一些语言或框架里非常有用的小技巧4. fixme 标识我不理解的地方,或者有待修正的bug5. byme 被我改写了官方的函数或者用法其中im...
阅读全文
摘要:我曾经好多年对Java的==和equals的区别和联系搞不清楚,后来搞清楚了,笔记在这里:http://www.cnblogs.com/findumars/p/3240761.htmlhttp://www.cnblogs.com/findumars/p/3746878.html刨去更细节的内容,其实...
阅读全文
摘要:这历来是一个受争议的话题,书上的样板话我就不说了。我只说说自己的一点观察和体会:1. 多重继承在理论上是有道理,21天学通C++里举了一个例子,就是飞马继承于飞鸟(会飞)和马(会跑),你可以定义一个函数func1,使之有时候飞有时候跑(5公里以内跑,更远就飞),看上去两全其美,但如果既要飞又要跑呢?...
阅读全文
摘要:MFC中的消息机制没有采用C++中的虚函数机制,原因是消息太多,虚函数内存开销太大。在Qt中也没有采用C++中的虚函数机制,原因与此相同,其实这里还有更深层次上的原因,大体说来,多态的底层实现机制只有两种:1. 一种是按照名称查表2. 一种是按照位置查表两种方式各有利弊,而C++的虚函数机制无条件的...
阅读全文