C/C++
SurgeOfLove
计划重于一切!
展开
-
Linux 中的fork()函数
fork()函数总是“调用一次,返回两次”,在父进程中调用一次,在父进程和子进程中各返回一次。fork在子进程中返回值是0,在父进程中返回值是子进程的id。子进程在创建时会复制父进程的当前状态,包含变量值和缓存中的值。程序运行的结果基本上是父子进程交替打印,但是也不一定,取决于系统中其他进程的运行情况和内核的调度算法。fork调用的奇妙之处就是它仅仅被调用一次,但是却能够返回两次,原创 2015-04-19 10:12:16 · 524 阅读 · 0 评论 -
Linux C开发--头文件查找、动态库搜索
一、Linux C语言头文件搜索路径本文介绍在linux中头文件的搜索路径,也就是说你通过include指定的头文件,linux下的gcc编译器它是怎么找到它的呢。在此之前,先了解一个基本概念。头文件是一种文本文件,使用文本编辑器将代码编写好之后,以扩展名.h保存就行了。头文件中一般放一些重复使用的代码,例如函数声明、变量声明、常数定义、宏的定义等等。当使用#include语句将头文件转载 2016-06-27 08:39:15 · 537 阅读 · 0 评论 -
构造函数和复制控制成员
构造函数和复制控制成员不能继承(即构造函数,析构函数,复制构造函数,赋值操作符),每个类定义自己的构造函数和复制控制成员。像任何类一样,如果类不定义自己的默认构造函数和复制控制成员,就将使用合成版本。 ² 派生类构造函数 派生类的构造函数受继承关系的影响,每个派生类构造函数除了初始化自己的数据成员之外,还要初始化基类。派生类的合成默认构造函数与非派生的构造函数只有一点不同:除了原创 2015-08-06 09:49:33 · 528 阅读 · 0 评论 -
重载操作符与转换
Ø 重载操作符的定义重载操作符是具有特殊名称的函数:保留字operator后接需定义的操作符号。像任意其他函数一样,重载操作符具有返回类型和形参表,如下语句:Sales_item operator+(const Sales_item&, constSales_item&); Ø 可以和不可以重载的操作符 Ø 重载操作符必须具有原创 2015-08-05 17:32:12 · 573 阅读 · 0 评论 -
C++中构造函数调用顺序
C++中若某类a从基类b、虚基类c派生而来,且该类中具有对象成员d,则在构造该类的对象时执行构造函数的顺序?构造一个类的对象的一般顺序是:class a:public b, virtual public c{};1.如果该类有直接或间接虚基类,先执行虚基类的构造函数;2.如果该类有其他基类,按照他们在继承声明列表中出现的顺序分别执行构造函数,但是不再执行它们的虚基类的构造函数。3.原创 2015-08-06 10:52:58 · 904 阅读 · 0 评论 -
类成员的指针
ps:const对象只能调用const函数!!非const对象随便!! 成员指针只应用于类的非 static成员。static 类成员不是任何对象的组成部分,所以不需要特殊语法来指向 static成员,static成员指针是普通指针。int *p = &Screen::total; (total 是 static int total;) 例子:#incl原创 2015-08-06 11:06:41 · 585 阅读 · 0 评论 -
C++中的多态
l 动态绑定voidprint_total(ostream &os, const Item_base &item, size_t n){os}该函数的工作很普通:调用其 item 形参的 book 和 net_price 函数,打印结果。关于这个函数,有两点值得注意。第一,虽然这个函数的第二形参是Item_base的引用但可以将 Item_base对象或 Bulk原创 2015-08-06 09:11:44 · 465 阅读 · 0 评论 -
复制控制
当定义一个新类型的时候,需要显式或隐式地指定复制、赋值和撤销该类型的对象时会发生什么——这是通过定义特殊成员:复制构造函数、赋值操作符和析构函数来达到的。如果没有显式定义复制构造函数或赋值操作符,编译器(通常)会为我们定义。 复制构造函数是一种特殊构造函数, 具有单个形参, 该形参 (常用 const & 修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将原创 2015-08-04 15:53:00 · 536 阅读 · 0 评论 -
c++中不能区分重载的情况
Recordlookup(const Account &acct);Recordlookup(const Account&); // parameter names are ignored typedefPhone Telno;Recordlookup(const Phone&);Recordlookup(const Telno&); // Telno and Phone ar原创 2015-07-31 15:07:57 · 688 阅读 · 0 评论 -
C++中类定义的细节
成员变量每个类可以没有成员,也可以定义多个成员,成员可以是数据、函数或类型别名。一个类可以包含若干公有的、私有的和受保护的部分。在 public 部分定义的成员可被使用该类型的所有代码访问;在 private 部分定义的成员可被其他类成员访问。protected可以被子类访问。 构造函数与类同名,且没有返回值的函数,用于构造一个对象。一般使用一个初始化列表来初始化数据成员,原创 2015-08-03 14:26:50 · 2255 阅读 · 0 评论 -
指向函数的指针
bool(*pf)(const string &, const string &);// int(&arr)[10]//int (*p)[10] typedefbool (*cmpFcn)(const string &, const string &);cmpFcnpf;pf=某函数名; //注意函数名前没有&pf=&某函数名; //两者等价!!原创 2015-07-31 15:09:03 · 508 阅读 · 0 评论 -
c++中的引用(别名)
主要用于做函数的形式参数。引用是复合类型,通过在变量前添加&符号来定义。不能定义引用类型的引用!!除了作为形参,定义引用时必须初始化!!如:int ival= 1024;int&ref = ival;int&ref1; errorint&ref2 = 10; error,必须关联到一个对象 ps:不能将引用再绑定到另一个对原创 2015-07-31 15:04:02 · 3566 阅读 · 0 评论 -
#include<algorithm>
#include标准库还定义了一组泛华的算术算法,命名习惯和泛型算法相同,使用这些算法必须:#include Ø #includeint sum = accumulate(vec.begin(), vec.end(), 42); 用于指定累加起始值的第三个实参是必要的,因为 accumulate 对将要累加的元素类型一无所知,因此,除此之外,没有别的办法原创 2015-08-03 11:27:31 · 5086 阅读 · 0 评论 -
迭代器简介
每种容器都定义了自己的迭代器类型,只有少数容器支持下标操作。因为迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作的 vector 类型也是这样。如: vector::iterator iter; begin()和end() 每种容器都定义了一对命名为begin和end的函数,用于返回迭代器。如果容器中有元素的话,原创 2015-07-31 15:05:21 · 438 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.csdn.net/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2015-06-02 09:56:55 · 321 阅读 · 0 评论 -
结构体对齐问题以及强制类型转换问题总结
一、什么是对齐 现在使用的计算机中内存空间都是按照字节划分的,从理论上讲似乎对任何类型的变量的访问都可以从任何地址开始,但实际上计算机系统对于基本数据类型在内存中的存放位置都有限制。举个例子,一个变量占用n个字节,则该变量的起始地址必须能够被n整除,即存放起始地址%n = 0。各种基本数据结构类型在内存中是按照这种规则排列,而不是一个紧接着一个排列的。这就是内存对齐。转载 2016-06-27 08:40:24 · 657 阅读 · 0 评论