
C/C++
panhgshine
坚持踏踏实实地去做最后肯定会见成效
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ const关键字 总结
1、const修饰变量const修饰普通变量只需掌握两点:(1)声明时必须进行初始化;(2)变量的值不能再改变。如代码:const int i; //error: uninitialized const 'i'const int j =0;j = 1; //error: assignment of read-only variable 'j'const修饰指针变量总结出来两种情况:(原创 2012-11-01 16:56:19 · 561 阅读 · 0 评论 -
返回[0,n)中的一个随机数
一般返回一个[0,n)的随机数,都会使用rand()%n。rand()函数返回区间为[0,RAND_MAX]中的一个数。RAND_MAX在中定义的。实际上rand()是一个伪随机函数。并且如果n的值很大,那么RAND_MAX就不会均匀地被n除尽,一些余数出现的概率将会比其他的更大。假定RAND_MAX是32767,且n等于20000。则rand()将会有两个不同的值能令rand()%n等于1000原创 2012-12-19 19:33:13 · 1317 阅读 · 0 评论 -
C++用户自定义转换(User-Defined Conversion)(摘自cnblogs)
C++用户自定义转换(User-Defined Conversion)在计算机语言中,类型的存在让我们可以更有针对性的进行数据和功能的处理,但是却又存在了类型转化的问题。C++如同其他计算机语言一样,也同样都这些问题。不过它相对于C而言多了引用类型(Reference);相对与C#来讲,又多了指针类型(Point)。这似乎让它的类型转化变得更加扑朔迷离。转载 2012-12-30 10:21:50 · 477 阅读 · 0 评论 -
C++对象的内存分析(1)
c++对象的内存分析.pptx 936kb: 介绍 虚函数表、虚指针、多态、重写(override)、虚析构、指针调整… 这些概念大家应该都不陌生,不过,除了了解概念和用法,你了解他们背后的实现的机制吗。 本文通过的C++类的对象内存进行分析,来讲解这些面向对象的特性是怎么实现的。本文的目的是为了更好的理解C++面向对象的特性的实质,而对于编译器实现的细节并不会转载 2012-05-14 08:30:01 · 601 阅读 · 0 评论 -
C++对象的内存分析(4)
前言 本章节是4个课题的最后一个,我们将讨论多重继承情况下,对象内存的布局。阅读本文,请思考下面的问题:当子类从多个基类继承,虚函数指针和成员变量将如何布局?编译器如何进行子类和基类之间类型转换?如果多个基类具有同样的虚函数,子类选择哪个实现来调用?如果子类重写该虚函数,那么它覆盖的是哪个基类的实现呢? 多重继承 我们将分析这样的例子:CFinal类继承自CBa转载 2012-05-14 08:33:23 · 518 阅读 · 0 评论 -
C++对象的内存分析(6)
前言 本节讨论构造函数,析构函数和虚析构函数。可能很多人都有这样的经历,面试时经常被问到:什么情况下要使用虚析构函数,为什么要使用虚析构函数?本文将试图对编译器的实现机制进行分析,来回答这个问题。 构造函数和析构函数的调用链 我们从例子来分析,首先我们来看下面这个继承链: 代码如下:class CBasic{public:转载 2012-05-14 08:35:23 · 3105 阅读 · 0 评论 -
C++ 类的静态成员详细讲解
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即类名>::静态成员名>。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文先通过几个例转载 2012-05-22 21:30:28 · 480 阅读 · 0 评论 -
extern 关键字
解析“extern”1、 声明外部变量现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部。下面举一个简单的例子。创建一个工程,里面含有A.cpp和B.cpp两个简单的C++源文件://A.cppint i; void main(){}转载 2012-05-12 12:20:23 · 2577 阅读 · 0 评论 -
C++对象的内存分析(3)
前言 在第二节我们讲到从带虚函数的基类继承的子类,有一个虚函数指针在对象的最前端。但是,如果基类没有虚函数而子类有呢?阅读本节请思考下面的问题:没有虚函数的基类,会有虚函数指针和虚函数表吗?从该类继承的子类,内存中的元素如何布局。 Subject3:从不带虚函数的基类继承的子类 我们把上一节的CBasic类的2个虚函数删除,CFinal从CBasic类继承并增加新的转载 2012-05-14 08:32:27 · 481 阅读 · 0 评论 -
C++对象的内存分析(2)
前言 本章节讨论单继承情况下类对象的内存特性。阅读时请思考这几个问题:从子类到基类的类型转换,编译器做了什么?多态是怎么实现的?类的成员函数(包括虚函数)和普通函数有什么区别吗?Subject2:从带虚函数的基类继承的子类 类CFinal是我们要分析的目标,它从CBasic中继承而来,重写(override)了虚函数add;增加了一个新的虚函数;增加了一个成员变转载 2012-05-14 08:31:15 · 528 阅读 · 0 评论 -
C++对象的内存分析(5)
前言 前面4节我们已经完成了对4种C++对象布局的分析,本文试图覆盖更多的,常见的C++面向对象的概念。所以,最后2节将继续阐述2个主题:接口和抽象类以及构造函数、虚构函数和虚析构函数。 接口 这里我准备只主要阐述接口,而不谈一般的抽象类。因为在C++中,是没有“接口”这种类型的,所有的接口事实上是定义为纯抽象类。所谓纯抽象类,就是没有成员变量,没有实现了的函数转载 2012-05-14 08:34:07 · 542 阅读 · 0 评论 -
c++内存的分布
一、一个经过编译的C/C++的程序占用的内存分成以下几个部分: 1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。 2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表。 3、全转载 2012-05-24 16:13:08 · 529 阅读 · 0 评论 -
C++子类继承基类时virtual关键字的作用
1、 基类的析构函数加virtual后,删除基类指针时,会先调用实际object的析构函数。2、子类在delete时,会先执行本身的析构函数再执行基类析构函数。3、在基类member function上加virtual关键字就是为了基类指针在指向派生类对象时,实际去调用派生类对应的member function(即多态)。原创 2013-02-21 15:49:31 · 1844 阅读 · 0 评论