![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C&C++
pathenon
认真写程序,踏实做科研!
展开
-
跟我一起学习C++虚函数--第二篇
上一篇,我们讨论了带有虚函数的对象的内存布局情况。这一篇,主要讨论带有虚函数的类在单一继承情况下的内存布局情况。 还是从例子入手:01#include 02 03using namespace std;原创 2012-07-18 12:50:12 · 1569 阅读 · 0 评论 -
跟我一起学习C++虚函数--第五篇
在前一篇,我们讨论了在多重继承情况下,具有虚函数的类的内存布局情况。本篇将进一步探索在多重虚拟继承情况下的内存布局情况。 在讨论多重虚拟继承前,我们先对《 浅析GCC下C++多重继承 & 虚拟继承的对象内存布局》中的例子进行扩充。先看看带有虚函数的单一虚拟继承情况下类的内存布局。 先看例子:原创 2012-07-18 12:51:49 · 419 阅读 · 0 评论 -
浅析GCC下C++多重继承 & 虚拟继承的对象内存布局
继承是C++作为OOD程序设计语言的三大特征(封装,继承,多态)之一,单一非多态继承是比较好理解的,本文主要讲解GCC环境下的多重继承和虚拟继承的对象内存布局。一、多重继承 先看几个类的定义:01class Top02 {03pu原创 2012-07-18 12:48:40 · 856 阅读 · 0 评论 -
跟我一起学习C++虚函数--第一篇
我们知道,虚函数作为C++实现多态的方式,具有强大的RTTI(RunTime Type Identification)功能。虚函数使用起来比较简单,但是也很容易出错。本系列将带着你一步一步了解虚函数的内部实现机制,在掌握原理后,我相信你会对虚函数以及C++本身会有进一步的认识和理解。 注:本系列所有的关于C++虚函数的探索都是在GCC平台上进行的。一、原创 2012-07-18 12:49:39 · 1010 阅读 · 0 评论 -
跟我一起学习C++虚函数--第四篇
在前一篇,我们讨论了在多继承情况下,具有虚函数的类的内存布局情况。本篇将进一步探索在多重继承,即具有重复继承的情况下的内存布局情况。在阅读本篇和下一篇之前,建议先阅读本博客另一篇博文《浅析GCC下C++多重继承 & 虚拟继承的对象内存布局》。 先说一点题外话,细心的读者可能会发现,我们在探索不同情况下类的内存布局时,总是先通过查看类的大小以及其中各个成员变量的地址来进行分析原创 2012-07-18 12:51:09 · 394 阅读 · 0 评论 -
跟我一起学习C++虚函数--第三篇
上一篇我们讨论了在单一继承的情况下,具有虚函数的类对象的内存布局情况。本篇主要讨论在多继承情况下,对象的内存布局。 看例子:01#include 02using namespace std;03 0原创 2012-07-18 12:50:42 · 450 阅读 · 0 评论 -
从min & max一窥linux设计
好吧,我承认我标题党了。但是我仍然建议你能够继续往下读,最多花上一分钟时间。当然,如果能够浪费你十分钟以上,我的目的便达到了,而你也会有不一样的体会。 问题:你会怎样实现min & max这两个函数呢? 我想大多数人的做法无非三种:1)定义宏;2)定义函数; 3)定义inline函数。 对于第二种方法,不用多说,功能如此单一的函数效率会有折扣;对于第原创 2012-06-23 16:40:49 · 566 阅读 · 0 评论 -
isdigit()极品实现
我不得不承认,在编程的世界,无奇不有,码农的创造力是无穷的,也是妙不可言的!只要涉及到效率,永远是没有最快,只有更快! 我们知道,在标准C中,有函数int isdigit(int c)可以用来判断字符c是否为0~9之间的数字。比如:1int a = isdigit('1'); //a == 1原创 2012-06-23 16:05:43 · 4826 阅读 · 2 评论 -
GNU C定义变长结构体
在进入主题之前,这里有一个问题:在C中可以定义长度为0的数组吗? 答案是:标准的C中是不可以的,GNU C中可以。 比如定义这样一个数组:int data[0]; 使用GCC可以编译通过,而在VS下报错“cannot allocate an array of constant size 0”。 OK,下面看看怎样在GNU环境下使用长度为0的数组魔法般原创 2012-06-22 22:16:09 · 1088 阅读 · 1 评论 -
C++之智能指针
我们都知道,C和C++常被人诟病的一点就是程序员需要自己来维护对动态内存的申请和释放,具体来说就是malloc/free和new/delete的成对出现。能够保证它们成对出现,是一个良好的编程习惯,但是即使做到这一点,就能够保证万无一失吗?我们看一个例子: 我们先定义一个简单的类A:1class A2原创 2012-11-28 15:27:58 · 376 阅读 · 0 评论