随笔分类 - C++ OO研究
摘要:在java语言中,可以使用getObject(String)函数,从类名直接构建新的对象。 而在C++中是没有这种机制的,Qt虽然提供了元对象机制,但只可以获取对象的类名,不能反向构建。 这个问题我在百度上找了很多,但都没有满意的答案,索性翻出去google一下,终于找到了解决方法。 原文地址:ht
阅读全文
摘要:这是C++11新特性介绍的第十二部分,涉及到强制类型转换static_cast的相关内容。 static_cast是一个强制类型转换操作符。强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast、dynamic_cast、const_cast、reinterpert_cas
阅读全文
摘要:版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.csdn.net/u012317833/article/details/41011997在成员函数内定义static变量 成员函数内的局部变量可以是static
阅读全文
摘要:注意:本文中代码均使用 Qt 开发编译环境,如有疑问和建议欢迎随时留言。 模板是 C++ 支持参数化程序设计的工具,通过它可以实现参数多态性。所谓参数多态性,就是将程序所处理的对象的类型参数化,使得一段程序可以用于处理多种不同类型的对象。 函数模板 函数模板的定义形式是: template <cla
阅读全文
摘要:C++通过继承(inheritance)和虚函数(virtual function)来实现多态性。所谓多态,简单地说就是,将基类的指针或引用绑定到子类的实例,然后通过基类的指针或引用调用实际子类的成员函数(虚函数)。本文将介绍单继承、多重继承下虚函数的实现机制。 一、虚函数表 为了支持虚函数机制,编
阅读全文
摘要:存在父子类继承关系时,若有同名成员函数同时存在,会发生隐藏、覆盖和重载这几种情况。对于初学者也比较容易混淆,为此,我整理了一下我的个人看法,仅供参考。希望对大家理解有帮助,也欢迎指正。 1.父子类继承关系: 子类复制父类全部成员 首先,理解父子类的继承关系是怎样发生的。在此基础上就很容易理解它们之间
阅读全文
摘要:在公用继承、私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员。因此,公用派生类具有基类的全部功能,所有基类能够实现的功能,
阅读全文
摘要:1. 内部类的概念 如果一个类定义在另一个类的内部,这个内部类就叫做内部类。注意此时这个内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去调用内部类。外部类对内部类没有任何优越的访问权限。 即说:内部类就是外部类的友元类。注意友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所
阅读全文
摘要:To implement virtual functions, C++ uses a special form of late binding known as the virtual table. The virtual table is a lookup table of functions u
阅读全文
摘要:As it turned out this is a special kind of pointer. The this pointer stores the address of the class instance, to enable pointer access of the members
阅读全文
摘要:大家对虚表并不陌生,都知道每个含有虚函数的类对象都有1个虚指针,但是在现实使用中,却总是因为这而调试半天,才发现原来是虚指针惹的祸。我这几天在调试代码时候也中招了,我的问题是这样的,如下图,CTree是最底层基类(非虚类), CSamplerTree(虚类)派生自CTree,CMSamplerTre
阅读全文
摘要:由于最近公司要开发一个以C++插件机制为主的,主要有一个问题就是C++的二进制兼容性的问题。一旦类使用虚函数,只要随便改动下增删查改下头文件的虚函数,就会导致程序在跑的时候进行乱跳,因为这个时候exe跟dll里面的vtable模型是不一致的刚好程序是使用QT开发了,所以就用了两种方式来保证头文件一致
阅读全文
摘要:1. 概要 本文描述一个通过C++可变参数模板实现C++反射机制的方法。该方法非常实用,在Nebula高性能网络框架中大量应用,实现了非常强大的动态加载动态创建功能。Nebula框架在码云的仓库地址。 C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大
阅读全文
摘要:不使用C++时,很多C语言新手可能认为C语言缺乏了面向对象和抽象性,事实上,C语言通过某种组合方式,可以间接性的实现面对对象和抽象。 不过多态和继承这种实现,就有点小麻烦,但是依然可以实现。 核心: 利用 void 类型指针,可以指向任意类型指针。 通过这个我们就可以实现抽象性,让数据结构或函数不再
阅读全文
摘要:Java 和 C++ 都是面向对象的语言,允许对象之间的继承。两个语言的继承都设置有允许子类覆盖父类的“虚函数”,加引号是因为 Java 中没有虚函数这一术语,但是我们的确可以把 Java 的所有函数等同于虚函数,因为 Java 类的所有非 static 函数都可以被子类覆盖,这里仅借用“虚函数”这
阅读全文
摘要:[C++学习笔记14]动态创建对象 C#/Java中的反射机制 动态获取类型信息(方法与属性) 动态创建对象 动态调用对象的方法 动态操作对象的属性 前提:需要给每个类添加元数据 动态创建对象 实现原理:通过定义一个宏REGISTER_CLASS,传入类名,在该宏中创建一个类独有的Register类
阅读全文
摘要:先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this 就是指向m
阅读全文
摘要:1.(mov ecx,dword ptr [ebp-0Ch])将this指针压入ecx 2.(mov edx,dword ptr [ecx])this指针指向该对象的首地址,而该处的前四个字节存放着该对象的虚函数表的首地址,将虚表指针放到edx中。 3.(call dword ptr [edx+4]
阅读全文
摘要:一、虚函数的作用: 虚函数的作用是实现多态性,多态性是将接口与实现进行分离,用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。 总结,指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,这个函数就是虚函数。 下面来看一段简单的代码class A{publi
阅读全文
摘要:运行时类型识别(RTTI)的引入有三个作用: 1. typeid操作符的实现 1.1. 静态类型的情形 C++中支持使用typeid关键字获取对象类型信息,它的返回值类型是const std::type_info&,例: 理论上讲,编译器会为每一种类型生成一个能唯一标识该类型的类型信息对象,type
阅读全文