C++
文章平均质量分 76
小文兄弟
这个作者很懒,什么都没留下…
展开
-
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTT转载 2011-10-25 20:50:51 · 459 阅读 · 0 评论 -
c++const成员函数
一些成员函数改变对象,一些成员函数不改变对象。 例如: int Point::GetY() { return yVal; } 这个函数被调用时,不改变Point对象,而下面的函数改变 Point对象: void Point:: SetPt (int x, int y) { xVal=x; yVal=转载 2011-11-02 16:03:51 · 483 阅读 · 0 评论 -
C++ 之“友元类”学习笔记
=======================什么是友元类======================= 当一个类B成为了另外一个类A的“朋友”时,那么类A的私有和保护的数据成员就可以被类B访问。我们就把类B叫做类A的友元。=======================友元类能做什么======================= 友元类可以通过自己的方法来访问把它当转载 2011-11-22 13:37:06 · 700 阅读 · 0 评论 -
动态分配资源的自动释放 – auto_ptr的实现原理
原文:http://patmusing.blog.163.com/blog/static/13583496020101824142699/动态分配资源的自动释放的英文是 Resource Allocation In Initialization,通常缩写成RAII。根据《C++ Primer》第4版:“During stack unwinding, the function c转载 2011-11-12 21:34:48 · 548 阅读 · 0 评论 -
使用auto_ptr需要注意的事项
原文:http://patmusing.blog.163.com/blog/static/13583496020101824541270/a. auto_ptr定义于头文件memory中; b. auto_ptr只能用来管理单个动态创建的对象,而不能管理动态创建的数组; c.和其他copy和assign不同,auto_ptr的copy和assign会改变右边的操作数,a转载 2011-11-12 21:38:05 · 568 阅读 · 0 评论 -
拷贝构造函数及其参数类型
原文:http://patmusing.blog.163.com/blog/static/1358349602010182232781/拷贝构造函数的参数类型必须是引用,而且通常情况下还是const的,但是const并不是严格必须的。#include #include using namespace std; class CClass{public:转载 2011-11-12 21:41:11 · 901 阅读 · 0 评论 -
关于函数返回值的几种情况
引用:http://patmusing.blog.163.com/blog/static/13583496020113191407531/在一个函数的内部,return的时候返回的都是一个拷贝,不管是变量、对象还是指针都是返回拷贝,但是这个拷贝是浅拷贝。 1. 如果返回一个基本类型的变量,比如:int a;a = 5;return a; 那么就会a的一个转载 2011-11-12 21:31:00 · 590 阅读 · 0 评论 -
特殊数据类型成员变量的初始化
原文:http://patmusing.blog.163.com/blog/static/13583496020101814811570/有些成员变量的数据类型比较特别,它们的初始化方式也和普通数据类型的成员变量有所不同。这些特殊的类型的成员变量包括:a. 常量型成员变量b. 引用型成员变量c. 静态成员变量d. 整型静态常转载 2011-11-12 21:43:38 · 624 阅读 · 0 评论 -
CALLBACK, WINAPI, AFXAPI和函数调用方式
原文:http://blog.163.com/patmusing/blog/static/13583496020103233446784/(VC编译器下) 1. CALLBACK,WINAPI和AFXAPI到底是什么?它们分别在什么地方被定义的?在头文件windef.h中,CALLBACK, WINAPI, APIENTRY……#define CALLBACK __s转载 2011-12-06 09:41:47 · 785 阅读 · 0 评论 -
如何不用sizeof判断操作系统的位数
void main(int argc,char** argv){ typedef char * PType; PType array[2]; char *p0 = (char *)&array[0]; char *p1 = (char *)&array[1]; printf("%d",8*(p1 - p0));}常用数据类型对应字原创 2011-12-19 17:50:16 · 1884 阅读 · 0 评论 -
C笔试题(判断大端小端模式及大小端模式转换)
判断大端小端模式int checkEndion( void ){ union check { int i; char ch; }c; c.i = 1; return (c.ch ==1);}变量 i 占 4 个字节,但只有一个字节的值为 1,另外三个字节的值都为 0。如果取出低地址上的值为 0原创 2011-12-19 21:50:42 · 5155 阅读 · 0 评论 -
STL中容器的几个容易混淆的成员函数-size, capacity, resize, reserve
1. container::size()用于表示容器中有几个元素,用n来表示, 并不能表示容器现有的内存最多能存多少个元素。 2. container::capacity()用于表示容器现有的内存最多能够存放多少个元素, 用m来表示。 如果想要计算容器现有的内存还能够存放几个元素 = capacity() - size(); 3. container::resize(siz转载 2011-11-22 16:58:57 · 580 阅读 · 0 评论 -
STL中map用法详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有转载 2011-11-21 14:27:12 · 686 阅读 · 0 评论 -
C++ 对象的内存布局(上)
C++ 对象的内存布局(上) 陈皓http://blog.csdn.net/haoel 前言 07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这也是我为什么再写一篇续言的原因。因为,在上一篇文章中,我用了的示例都是非常简单的,主要是为了转载 2011-10-25 20:53:06 · 354 阅读 · 0 评论 -
C++ 对象的内存布局(下)
C++ 对象的内存布局(下) 陈皓http://blog.csdn.net/haoel 重复继承 下面我们再来看看,发生重复继承的情况。所谓重复继承,也就是某个基类被间接地重复继承了多次。 下图是一个继承图,我们重载了父类的f()函数。 其类继承的源代码如下所示。其中,每个类都有两个变量,一个是整形(4字节),一个是字符(1转载 2011-10-25 20:54:37 · 434 阅读 · 0 评论 -
C++中 Static作用和使用方法
C++中Static作用和使用方法1、什么是static? static 是C++中很常用的修饰符,它被用来控制变量的存储方式和可见性。2、为什么要引入static? 函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至转载 2011-10-28 10:02:18 · 3974 阅读 · 0 评论 -
也谈C++内存区域
众所周知,C++内存区域被分为5大类:栈、堆、自由存储区、全局/静态存储区、常量存储区。 栈由编译器控制,栈空间的申请、使用和释放全权由编译器处理。这里的“全权处理”意思是责任归属,并不是说编译器在程序运行时介入管理。实际上,编译器的工作在编译期就完成了,它对栈的管理体现在编译时对寄存器esp的维护上。 堆即程序员使用new和delete操作符进行管理的内存区域。对堆的访问往往转载 2011-10-28 14:07:19 · 1135 阅读 · 0 评论 -
初步认识dll,在VS2010平台上创建并使用dll
原文:http://blog.csdn.net/btwsmile/article/details/6676802一、为什么需要dll代码复用是提高软件开发的重要途径。一般而言,只要某部分代码具有通用性,就可以将它构造成相对独立的功能模块并在之后的项目中重复使用。比较常见的情况是各类应用程序框架,如ATL、MFC等,它们都以源代码的形式发布。由于这种复用是“源码级别”的,源代码完全暴露给转载 2011-10-28 14:13:28 · 823 阅读 · 0 评论 -
C++函数返回引用
舉一個簡單的例子int & B(int &n){n++;return n;}int main(){int a = 10;int & b = B(a); // 調用 B, 傳遞的是 a 的引用// 到了 B 裏, n 就是指 a,// return n; 就相當是 return a;// 返回到 b 的就是 a 的引用, b 就是 a// 對 n转载 2011-10-28 15:29:49 · 816 阅读 · 0 评论 -
公有继承、保护继承和私有继承
原文:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派转载 2011-10-28 15:46:04 · 841 阅读 · 0 评论 -
浅谈构造函数与析构函数的调用顺序
构造函数 先看看构造函数的调用顺序规则,只要我们在平时编程的时候遵守这种约定,任何关于构造函数的调用问题都能解决;构造函数的调用顺序总是如下:1.基类构造函数。如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序,而不是它们在成员初始化表中的顺序。2.成员类对象构造函数。如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序,而不是它们出现在成员初始化表转载 2011-10-28 13:32:50 · 25797 阅读 · 5 评论 -
强制修改const char*类型的数据
原文:http://blog.csdn.net/btwsmile/article/details/6772672C++是一门类型安全(type-safe)的编程语言,它对类型的检查是十分严格的。一个const char*类型的数据是不允许被修改的,如果程序违反了这条规定,编译器将毫不留情地提示错误,不让通过。作为程序员,须知道这样的限制是很有实际意义的,毕竟大多数情况下我们需要类型安全的代转载 2011-10-28 14:16:21 · 3578 阅读 · 0 评论 -
多重继承及虚继承中对象内存的分布
原文:http://www.tbdata.org/archives/878这篇文章主要讲解G++编译器中虚继承的对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。问题拿捏得十分到位,下面是我对原文的翻译,原文见这里(By Edsko de Vries, January 2006)。本文是介绍C转载 2011-10-31 16:34:54 · 542 阅读 · 0 评论 -
#运算符 ##预算符
#也是预处理?是的,你可以这么认为。那怎么用它呢? 别急,先看下面例子:#define SQR(x) printf("The square of x is %d.\n", ((x)*(x)));如果这样使用宏:SQR(8);则输出为:The square of x is 64.注意到没有,引号中的字符 x 被当作普通文本来处理,而不是被当作一个可以被替换的语言符号。转载 2011-12-19 21:53:12 · 940 阅读 · 0 评论