
C C++
文章平均质量分 76
Hsuxu
程序猿
展开
-
指针和引用的区别总结
指针和引用的区别总结1.从现象上看:指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变2.从内存分配上看:程序为指针变量分配内存区域,而引用不分配内存区域3.从编译上看:程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不转载 2012-03-30 14:34:49 · 659 阅读 · 0 评论 -
虚析构函数、纯虚析构函数、虚构造函数
一. 虚析构函数我们知道,为了能够正确的调用对象的析构函数,一般要求具有层次结构的顶级类定义其析构函数为虚函数。因为在delete一个抽象类指针时候,必须要通过虚函数找到真正的析构函数。如:class Base{public: Base(){} virtual ~Base(){}};class Derived: public Base转载 2012-04-10 15:51:56 · 1133 阅读 · 0 评论 -
C++中的RTTI介绍
作用 通过运行时类型识别(RTTI)(Run-Time Type Information),程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型。RTTI介绍 RTTI提供了以下两个非常有用的操作符: (1)typeid操作符,返回指针和引用所指的实际类型; (2)dynamic_cast操作符,将基类类型的指针或引用安全地转换为派生类型的指转载 2012-04-10 14:30:10 · 786 阅读 · 0 评论 -
C语言详解 - 枚举类型
注:以下全部代码的执行环境为VC++ 6.0在程序中,可能需要为某些整数定义一个别名,我们可以利用预处理指令#define来完成这项工作,您的代码可能是:#define MON 1#define TUE 2#define WED 3#define THU 4#define FRI 5#define SAT 6#define SUN转载 2012-05-23 19:34:52 · 814 阅读 · 0 评论 -
c语言中static 用法总结
一、c程序存储空间布局C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增长方向:转载 2012-05-23 19:40:07 · 548 阅读 · 0 评论 -
C++——extern关键字用法
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。 2 问题:extern 变量 在一个源文件里定义了一个数组:char a[6]; 在另外一个文件里用下列语句进行了声明:extern char *a; 请问,这样可以吗转载 2012-05-23 19:50:39 · 555 阅读 · 0 评论 -
C++中的临时对象
书归正传,我们知道在C++的创建对象是一个费时,费空间的一个操作。有些固然是必不可少,但还有一些对象却在我们不知道的情况下被创建了。通常以下三种情况会产生临时对象: 1,以值的方式给函数传参; 2,类型转换; 3,函数需要返回一个对象时; 现在我们依次看这三种情况: 一,以值的方式给函数传参。 我们知道给函数传参转载 2012-07-27 14:03:48 · 828 阅读 · 0 评论 -
linux轻量级进程与线程实现
一、Linux内核对多进程和多线程的支持方式Linux的线程实现是在核外进行的,核内提供的是创建进程的接口do_fork()。内核提供了两个系统调用__clone()和fork(),最终都用不同的参数调用do_fork()核内API。 do_fork()提供了很多参数,包括CLONE_VM(共享内存空间)、CLONE_FS(共享文件系统信息)、CLONE_FILES(共享文件描述符表)、CLO转载 2013-05-06 20:04:35 · 1510 阅读 · 0 评论 -
linux内核学习之进程和线程
一。定义 关于进程、轻量级进程、线程、用户线程、内核线程的定义,这个很容易找到,但是看完之后你可以说你懂了,但实际上你真的明白了么? 在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合和资源集合。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件转载 2013-05-06 20:13:26 · 1495 阅读 · 0 评论 -
C++类继承关系问题
在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public继承是最为常用的一种继承关系,代表了接口继承含义,而他们分别具体代表了什么含义呢?1. public 从语义角度上来说,public继承是一种接口继承,根据面向对象中的关系而言就是,子类 可以代替父类完成父类接口所声明的行为,也就是必须符合“Liskov替换原则(LS转载 2012-04-10 10:48:31 · 706 阅读 · 0 评论 -
c++ 虚函数的实现机制
1、c++实现多态的方法其实很多人都知道,虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?从more effecive c++其中一篇文章里面可以知道:是每个类用了一个虚表,每个类的对象用了一个虚指针。具体的用法如下:class A{public: virtual void f(); virtual void g();private转载 2012-04-10 10:28:39 · 635 阅读 · 0 评论 -
常量指针和指针常量
常量指针,就是指向常量的指针,关键字 const 出现在 * 左边,表示指针所指向的地址的内容是不可修改的,但指针自身可变。指针常量,指针自身是一个常量,关键字 const 出现在 * 右边,表示指针自身不可变,但其指向的地址的内容是可以被修改的。例: 常量指针: const char* ptr = “hello” 指针常量: char* const转载 2012-03-30 14:40:54 · 702 阅读 · 0 评论 -
内联函数
内联函数的优点是提高运行时间效率,缺点是增加了空间开销 对于普通函数,函数调用需要时间和空间开销,调用函数实际上将程序执行流程转移到被调函数中,被调函数的代码执行完后,再返回到调用的地方。这种调用操作要求调用前保护好现场并记忆执行的地址,返回后恢复现场,并按原来保存的地址继续执行。对于较长的函数这种开销可以忽略不计,但对于一些函数体代码很短,又被频繁调用的函数,就不能忽视这种开销。引入原创 2012-04-05 10:48:23 · 892 阅读 · 0 评论 -
C++类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:class CExample {public: int a; float b; //构造函数初始化列表 CExample(): a(0),b(8.8) {} //构造函数内部赋值 CExampl转载 2012-04-05 14:29:35 · 1074 阅读 · 0 评论 -
友元函数
类的重要特性是使数据封装与隐藏,但同时也给外部函数访问类中的私有和保护类型数据成员带来了不便。为此,C++使用了"友元函数"。一、友元函数友元函数必须在类中进行声明而在类外定义,声明须在函数类型的前面加上friend关键字,友元函数虽不是类的成员函数,但它可以访问类中的私有和保护类型数据成员。友元函数的使用:[cpp] view plaincopy转载 2012-04-06 09:43:15 · 963 阅读 · 0 评论 -
运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运算符转载 2012-04-06 09:34:52 · 848 阅读 · 0 评论 -
C++虚基类的实现机制
在《深度探索C++对象模型》里,有一个问题,也是去公司面试的时候那些技术人员常问的问题:在C++中,obj是一个类的对象,p是指向obj的指针,该类里面有个数据成员mem,请问obj.mem和p->mem在实现和效率上有什么不同。答案是:只有一种情况下才有重大差异,该情况必须满足以下3个条件:(1)、obj 是一个虚拟继承的派生类的对象(2)、mem是从虚拟基类派生下来的成转载 2012-04-10 10:31:55 · 964 阅读 · 0 评论 -
关于C++的构造函数, 复制构造函数 和 operator =
1.构造函数 构造函数的定义我就不说了,我想说的只有一点,看下面的例子: class C1 { public: //数据成员 int m_n; //构造函数 C1(int n = 0) { cout m_n = n; } }; int _tmain(int argc, _TCHAR* argv[])转载 2012-04-09 13:38:49 · 1059 阅读 · 0 评论 -
RAII惯用法:C++资源管理的利器
RAII是指C++语言中的一个惯用法(idiom),它是“ResourceAcquisitionIsInitialization”的首字母缩写。中文可将其翻译为“资源获取就是初始化”。虽然从某种程度上说这个名称并没有体现出该惯性法的本质精神,但是作为标准C++资源管理的关键技术,RAII早已在C++社群中深入人心。我记得第一次学到RAII惯用法是在Bjarne Stroustrup的《C++程转载 2012-04-09 16:37:07 · 504 阅读 · 0 评论 -
小议同步IO :fsync与fdatasync
对于提供事务支持的数据库,在事务提交时,都要确保事务日志(包含该事务所有的修改操作以及一个提交记录)完全写到硬盘上,才认定事务提交成功并返回给应用层。一个简单的问题:在*nix操作系统上,怎样保证对文件的更新内容成功持久化到硬盘? 1. write不够,需要fsync一般情况下,对硬盘(或者其他持久存储设备)文件的write操作,更新的只是内存中的页缓存(page cache),转载 2013-06-24 17:49:47 · 1339 阅读 · 0 评论