
C++面向对象概念
文章平均质量分 66
稚枭天卓
manu
展开
-
C++ 虚函数与纯虚函数 浅析
在虚函数与纯虚函数的学习中,要求理解虚函数与纯虚函数的定义,了解虚函数与纯虚函数在实例化上的差异,掌握两者在实现上的必要性,熟悉纯虚函数在子类与孙类的函数类型。本文即针对上述问题展开阐述。原创 2015-07-25 22:06:08 · 1181 阅读 · 0 评论 -
C++ 虚指针、成员变量与类对象的偏移地址
本文根据对象中虚指针、成员变量、成员函数在类对象中的相对位置,分析并给出虚指针、成员变量在类对象的偏移地址分布情况及相关源码。原创 2015-08-22 09:39:29 · 3385 阅读 · 0 评论 -
C++ 浅析 STL 中的 list 容器
list - 擅长插入删除的链表链表对于数组来说就是相反的存在。数组本身是没有动态增长能力的(程序中也必须重新开辟内存来实现),而链表强悍的就是动态增长和删除的能力。但对于数组强悍的随机访问能力来说的话,链表却很弱。list - 是一个双向链表的实现。为了提供双向遍历的能力,list要比一般的数据单元多出两个指向前后的指针。这也是没办法的,毕竟现在的PC内存结构就是原创 2015-08-22 15:16:42 · 893 阅读 · 0 评论 -
C++ 关于类与对象在虚函数表上唯一性问题 浅析
很多教材上都有介绍到虚指针、虚函数与虚函数表,有的说类对象共享一个虚函数表,有的说,一个类对象拥有一个虚函数表;还有的说,无论用户声明了多少个类对象,但是,这个VTABLE虚函数表只有一个;也有的在说,每个具有虚函数的类的对象里面都有一个VPTR虚函数指针,这个指针指向VTABLE的首地址,每个类的对象都有这么一种指针。今天,我们就来解决这个问题,同一个类的不同对象,是不是拥有“相同”的虚函数表,这个相同是物理上的相同(内存地址)还是逻辑上的相同(数据结构)。本文现详述如下!原创 2015-07-26 16:44:24 · 5148 阅读 · 7 评论 -
C++ 覆盖 重载 隐藏 浅析
本文首先阐释覆盖和重载的基本定义以及它与异常类型、异常数目还有返回值等相关概念间的关系;然后,介绍多态与虚函数等相关概念,并给出代码示例,以比较说明基类指向子类对象地址的指针与子类指向强制转换为子类的基类对象地址的指针在虚函数与一般成员函数(也是隐藏机制的函数)上,输出情况的异同;最后,阐明隐藏等相关概念,给出代码示例,以比较说明指向子类对象地址的基类指针和子类指针在虚函数、隐藏函数、一般成员函数上输出的异同。【文末,给出本文最关键的一句话,原创 2015-07-01 09:17:47 · 2385 阅读 · 1 评论 -
C++ 之 虚函数、虚基类与纯虚函数 浅析
虚基类 (在继承的类的前面加上virtual关键字表示被继承的类是一个虚基类,它的被继承成员在派生类中只保留一个实例。) 1, 一个类可以在一个类族中既被用作虚基类,也被用作非虚基类。 2, 在派生类的对象中,同名的虚基类只产生一个虚基类子对象,而某个非虚基类产生各自的子对象。 3, 虚基类子对象是由最派生类的构造函数通过调用虚基类的构造函数进行初始化的。原创 2015-09-08 16:56:04 · 903 阅读 · 0 评论 -
C/C++ 之 关于空类的大小与构造函数参数传递
一 . 空类的类空间1)空类大小 是0,所占空间 是 1 ;2)空类自己写构造与析构函数,大小仍然是 1 ;3)空类中的析构函数标记为虚函数,大小为 4,如果在64位机 上 是 8 ;二. 构造函数的参数传递如果 复制构造函数 传入的形参是数值,形参传入 函数实参的时候 又会 调用 复制构造函数,构成调用循环,往复不会停止,因此,复制构造函数传入的应该是 引用 而不是 数值原创 2015-09-20 21:31:35 · 1160 阅读 · 0 评论 -
C++ 与 Java 之中的虚函数、抽象函数、抽象类、接口 比较
1. 虚函数虚函数的存在是为了多态。C++中普通成员函数加上virtual关键字就成为虚函数Java中其实没有虚函数的概念,它的普通函数就相当于C++的虚函数,动态绑定是Java的默认行为。如果Java中不希望某个函数具有虚函数特性,可以加上final关键字变成非虚函数。 2. 抽象函数(纯虚函数) 抽象函数或者说是纯虚函数的存在是为了定义接口。 C原创 2016-03-09 20:50:38 · 1939 阅读 · 2 评论 -
C++ 静态多态和动态多态 浅析
今天的C++已经是个多重泛型编程语言(multiparadigm programming lauguage),一个同时支持过程形式(procedural)、面向对象形式(object-oriented)、函数形式(functional)、范型形式(generic)、元编程形式(metaprogramming)的语言。 这些能力和弹性使C++成为一个无可匹敌的工具,但也可能引发使用者的某些迷惑,比如原创 2015-08-26 20:41:52 · 4832 阅读 · 0 评论 -
C/C++ 之 异常处理机制核心观点
C++异常处理机制核心观点: 0. 如果使用普通的处理方式:ASSERT, return等已经足够简洁明了,请不要使用异常处理机制。 1. 比C的setjump, longjump优秀。 2. 可以处理任意类型的异常。 你可以人为地抛出任何类型的对象作为异常。 throw 100;原创 2016-03-21 21:01:51 · 883 阅读 · 1 评论 -
C++ map 浅析
为什么需要hash_map用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能。例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改:岳不群-华山派掌门人,人称君子剑张三丰-武当掌门人,太极拳创始人东方不败-第一高手,葵花宝典...这些信息如果保存下来并不复杂,但是找起来比较麻烦。例如我要找"张三丰"的信息,最傻的方法就是原创 2015-07-17 16:01:04 · 727 阅读 · 0 评论 -
C/C++ 之 操作符重载
1.成员函数重载操作符:除“.”,“*”,“::”,“?:”外其他操作符都可重载(1) a.双目操作符声明格式:class { operator #();}b.双目操作符定义格式: ::operator #(){}c.双目操作符使用格式: a; b;a # b或a.operator(b);(2)a.单目操作符重载声原创 2015-09-24 22:23:45 · 1068 阅读 · 0 评论 -
C++ 之 访问控制与访问控制的继承
private: 本类函数和友元函数可以访问。protected: 本类函数、友元函数和子类函数可以访问。public: 本类函数、友元函数、子类函数和本类的对象可以访问。和公有继承、保护继承和私有继承没有关系,保护继承和私有继承影响的是子类的继承关系。例类B从类A派生,私有继承,只能说基类A的public和protected成员到了子类B后,都变为private,B再往下原创 2015-09-07 15:26:28 · 1135 阅读 · 0 评论 -
C++ 宏、范型和RTTI 浅析
RTTI(Run-Time Type Identification)是面向对象程序设计中一种重要的技术。现行的C++标准对RTTI已经有了明确的支持。不过在某些情况下出于特殊的开发需要,我们需要自己编码来实现。本文介绍了一些关于RTTI的基础知识及其原理和实现,并分析比较三者是线上的差异与联系。原创 2015-07-26 21:19:18 · 1441 阅读 · 0 评论 -
C++ 深入理解 虚继承、多重继承和直接继承
本文从5段代码实例出发,通过类中类的普通继承,类的虚继承,类的多重继承,多个虚函数类的普通继承、虚继承与多重继承,几个交叉概念,详细的阐释了继承、虚函数与虚继承的基本概念,深入剖析了继承于虚继承的区别于联系。原创 2015-07-25 16:54:24 · 12064 阅读 · 5 评论 -
C++ push方法与push_back方法 浅析
push与push_back是STL中常见的方法,都是向数据结构中添加元素。初识STL,对于添加元素的方法以产生混淆,这里暂对两种方法作出比较分析。此外,本文还将简述push对应的stack与queue系列,常见方法的介绍,以及与push_back相对应的vector系列常见方法介绍。详见下文。原创 2015-07-12 21:13:17 · 95899 阅读 · 2 评论 -
C++ stack queue vector 中 易混淆的常用方法 浅析
C++ 中stack,queue,vector是常见的数据结构,它们分别封装在<stack>,<queue>,<vector>头文件中。本文将分述三个模板容器的常见方法,以及相互之间易混淆的部分。原创 2015-07-13 11:14:22 · 3518 阅读 · 0 评论 -
C++ 获取类成员函数地址方法 浅析
C语言中可以用函数地址直接调用函数:void print (){ printf ("function print");} typdef void (*fun)();fun f = print;f();C++中类非静态成员函数必须通过实例去调用,C++中类成员函数调用:class test{public:void print (){ printf ("func原创 2015-07-26 21:41:13 · 15440 阅读 · 0 评论 -
C++ 中 dynamic_cast 使用(二)
首先,dynamic_cast依赖于RTTI信息,其次,在转换时,dynamic_cast会检查转换的source对象是否真的可以转换成target类型,这种检查不是语法上的,而是真实情况的检查。先看RTTI相关部分,通常,许多编译器都是通过vtable找到对象的RTTI信息的,这也就意味着,如果基类没有虚方法,也就无法判断一个基类指针变量所指对象的真实类型, 这时候,dynamic_cast原创 2015-08-26 20:55:53 · 872 阅读 · 0 评论 -
C++ vector,list,dequeue,stack 存储结构浅析
vector适用:对象数量变化少,简单对象,随机访问元素频繁list适用:对象数量变化大,对象复杂,插入和删除频繁最大的区别是,list是双向的,而vector是单向的。因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则: 1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 2、如原创 2015-08-27 10:45:04 · 3205 阅读 · 0 评论 -
C++ 类继承与对象赋值 情况下 成员变量的覆盖 浅析
类的继承以及对象的赋值会带来成员变量的相互传递。这里详细讨论了,类间继承带来的成员变量的传递采用覆盖原则,采用函数级的成员变量的取值;对象赋值带来的成员变量的传递采用,实函数采用数据类型的实函数,虚函数采用赋值源的虚函数,成员变量采用赋值源的成员变量,其实也是函数级的成员变量。原创 2015-07-02 10:13:56 · 5571 阅读 · 0 评论 -
C++ 之 explicit,mutable,volatile 浅析
explicit:放在构造函数前面可以阻止构造函数的隐式类型转换。这样可以避免不必要的错误。violate:告诉编译器不要去假定这个变量的值,因为它随时可能会改变。这是为了阻止某些编译器的优化策略直接从上次缓冲在寄存器里读取数据,而不从内存读。volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关原创 2015-09-07 20:24:08 · 2540 阅读 · 1 评论 -
C/C++ 之 ‘++’、‘+’、‘+=’、‘-’、‘()’、‘--’ 操作符的重载实现重载
1. 操作符(++,+,+=,小于号等)重载新建QT项目,编写头文件[cpp] view plaincopyprint?#ifndef DIALOG_H #define DIALOG_H #include #include namespace Ui { class Dialog;原创 2015-09-24 22:26:44 · 2279 阅读 · 0 评论 -
HashMap 详解
http://alex09.iteye.com/blog/539545/ HashMap 源码详解 public V put(K key, V value) { // 如果 key 为 null,调用 putForNullKey 方法进行处理 if (key == null) return putForNullKey(value); //原创 2017-04-03 20:36:23 · 361 阅读 · 0 评论