
c/c++
love-xiao-forever
这个作者很懒,什么都没留下…
展开
-
main函数结束后怎么继续执行一段代码?
在main函数执行结束后,还想继续执行一段甚至多段代码,这就需要用_onexit注册一个函数,使该函数在main结束后执行。_oneexit(funname);其中参数是一个函数名,且该函数无参数,返回值为int。看代码:#include using namespace std;int fun1(){ cout<<"this is in func1 \n"; return 1;}原创 2013-07-10 15:39:02 · 2470 阅读 · 2 评论 -
虚函数用法和注意事项总结
通常,编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏函数中保存了一个指向函数地址数组的指针,这个地址数组是虚函数表,虚函数表中保存了类中声明的虚函数的地址。 无论类中包含的虚函数是一个还是10个,都只在对象中添加一个指针,只是指向的地址表的大小不同而已。基类中会有一个指针指向一个虚函数表,派生类中也包含一个指针。 1,若派生类,没有重新定义虚函数,则派生原创 2013-06-18 10:08:52 · 2024 阅读 · 0 评论 -
详解C语言的类型转换
详解C语言的类型转换1.自动类型转换字符型变量的值实质上是一个8位的整数值,因此取值范围一般是-128~127,char型变量也可以加修饰符unsigned,则unsigned char 型变量的取值范围是0~255(有些机器把char型当做unsighed char型对待, 取值范围总是0~255)。如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低转载 2013-06-17 21:37:04 · 1269 阅读 · 0 评论 -
关于静态联编和动态联编的分析
在C++中,联编是指一个计算机程序的不同部分彼此关联的过程。按照联编所进行的阶段不同,可分为两种不同的联编方法:静态联编和动态联编。1. 静态联编静态联编是指联编工作在编译阶段完成的,这种联编过程是在程序运行之前完成的,又称为早期联编。要实现静态联编,在编译阶段就必须确定程序中的操作调用(如函数调用)与执行该操作代码间的关系,确定这种关系称为束定,在编译时的束定称为静态束定。静态联编对函数原创 2013-06-14 09:44:57 · 1598 阅读 · 1 评论 -
程序员面试宝典几道题
1,C++如何阻止一个类被实例化答:使用抽象类,或者构造函数定义为private2,一般在什么时候构造函数被声明为private?答:比如要阻止编译器生成默认的拷贝构造函数的时候3,什么时候编译器会生成默认的拷贝构造函数?答:只要自己没有写,当程序中需要的时候,就会生成4,如果你已经写了一个构造函数,编译器还会生成拷贝构造函数吗?答:会生成原创 2013-06-14 09:16:00 · 897 阅读 · 0 评论 -
C++中多重继承与虚继承资料的整理
最近在看C++的东西,看了好多多重继承的问题,有些说的很简单,有的说的很繁琐,把资料整理一下。在多重继承中,基类的构造函数的调用次序既不受派生类构造函数初始化列表中出现的基类构造函数的影响,也不受基类在构造函数初始化列表中的出现次序的影响,它按照基类在类派生列表中的出现次序依次调用相应的基类构造函数。析构顺序与构造顺序逆序进行。 多重继承中,派生类的指针或引用可以转换为其任意基类的原创 2013-06-14 08:49:31 · 1273 阅读 · 0 评论 -
c++中的抽象概念详解
一、定义.在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”。virtual void funtion1()=0二原创 2013-06-13 14:18:15 · 1835 阅读 · 0 评论 -
虚继承和虚函数继承
虚继承是为了在多继承的时候避免引发歧义, 比如类A有个就是a,B继承了A,C也继承了A,当D多继承B,C时,就会有歧义产生了,所以要使用虚拟继承避免重复拷贝。 虚函数继承是解决多态性的,当用基类指针指向派生类对象的时候,基类指针调用虚函数的时候会自动调用派生类的虚函数,这就是多态性,也叫动态编联虚函数继承: class A { virtu原创 2013-06-13 09:31:00 · 1225 阅读 · 0 评论 -
阅读代码,写出运行结果
int *pa=NULL;int *pb=pa+15;printf("%x",pb);15*4=60;所以输出地十六进制结果是3C,这样在大系统里面使用未初始化的指针式很危险的原创 2013-06-11 13:52:49 · 1755 阅读 · 0 评论 -
使用dynamic_cast转换的一个例子
#include "iostream"using namespace std;class A{public:virtual void foo() { cout<<"A:foo()\n"; } void pp() { cout<<"A:pp()\n"; }};class B:public A{public: void f原创 2013-06-11 11:11:52 · 944 阅读 · 0 评论 -
const_cas使用
const int i=10;// i=20;出错,无法改变const变量的值 int a=1; int * const p=&a; cout<<*p<<endl; int b=2; const_cast(p)=&b; cout去除掉指针的const属性原创 2013-06-11 10:36:22 · 911 阅读 · 0 评论 -
程序员面试宝典----嵌入式编程问题
指出下列代码的错误:interrupter double computer_area(double radius){ double area=PI*radius*radius; printf("aread=%f\n",area); return area;}解析:中断是嵌入式编程中最重要的组成部分,这导致了很多编译器开发商提供了一种扩展----支持中断。于是产生了一个新的关键字原创 2013-06-11 16:18:32 · 1359 阅读 · 0 评论 -
static_cast,reinterpret_cast
int n=9; double d=static_cast(n); cout<<n<<", "<<d<<endl; double t=reinterpret_cast(n); coutstatic_cast在编译时使用类型信息转换,在转换执行必要地检测,其操作数相对时安全的,reinterpret_cast仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换。第一段代码输出正原创 2013-06-11 10:53:28 · 836 阅读 · 0 评论 -
栈与队列
(1)采用链式存储实现栈的初始化、入栈、出栈操作。(2)采用顺序存储实现栈的初始化、入栈、出栈操作。(3)采用链式存储实现队列的初始化、入队、出队操作。(4)采用顺序存储实现循环队列的初始化、入队、出队操作。(5)在主函数中设计一个简单的菜单,分别测试上述算法。[cpp] view plaincopy//用链表转载 2013-06-12 15:49:08 · 887 阅读 · 0 评论 -
清除整型变量a的bit3
#define BIT3 (0x1<<3)static int a;void set_bit3(){a&=~bit3;}原创 2013-06-11 13:50:00 · 1598 阅读 · 0 评论 -
C++四种强制类型转换及其区别
昨天参加爱立信笔试的时候遇到了这样一个问题,就是解释一下C++四种强制类型转换的方法以及其应用场合,之前有看过这个知识点,但是,考试的时候怎么想也就没有写的很全面,于是,这里整理一下:C++中的四种强制类型转换除了具有C语言强制类型转换的功能外,还可提供更好的控制强制转换的过程;能更清晰地表明程序员的意图,程序员只有看到这样的代码,立即就能知道一个强制类型转换的目的。 C风格的强制类型转换原创 2013-06-11 10:12:22 · 1828 阅读 · 0 评论 -
C语言volatile关键字
volatile 是易变的、不稳定的意思。很多人根本就没见过这个关键字,不知道它的存在。也有很多程序员知道它的存在,但从来没用过它。我对它有种“杨家有女初长成,养在深闺人未识” 的感觉。volatile 关键字和const 一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优转载 2013-06-01 10:05:49 · 837 阅读 · 0 评论 -
队列用链表实现(建立,插入新元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空)
下午把队列的各种操作用链表实现了一下,建立,插入元素,删除元素,读取元素,全部删除,全部读出,判断是否为空,清空,源代码调试已经通过,运行结果如下图所示:#include "iostream"using namespace std;typedef struct student{ int data; struct student * next;}node;//定义结构体节点原创 2013-06-18 16:53:55 · 3499 阅读 · 2 评论 -
关键字struct与class区别
==>默认继承权限。class的默认继承关系是private,struct的是public==>默认成员权限。class中的默认成员(变量与函数)权限都是private,struct的是public原创 2013-06-09 09:24:48 · 849 阅读 · 0 评论 -
二叉排序树详解
二叉排序树(Binary Sort Tree或Binary Search Tree) 的定义为:二叉排序树或者是空树,或者是满足下列性质的二叉树。(1) :若左子树不为空,则左子树上所有结点的值(关键字)都小于根结点的值;(2) :若右子树不为空,则右子树上所有结点的值(关键字)都大于根结点的值;(3) :左、右子树都分别是二叉排序树。 结论:若按中序遍历一棵二叉排序树原创 2013-06-21 10:38:47 · 2116 阅读 · 0 评论 -
C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容
一、本文目的与说明 1. 本文目的:理清在各种继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容。 2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的特殊性,所以在总结它的性质时将它单独列出来了。 3. 单继承、多继承、虚继承,既然都属于继承,那么虽然有一定的区别,但还是相同点比较多。如果放在一块讲,但为了转载 2013-06-20 20:35:14 · 1076 阅读 · 0 评论 -
C++经典笔试题及参考答案-趋势科技
1、static有什么用途?(请至少说明两种)答案:1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用2、引用与原创 2013-06-20 13:52:51 · 3995 阅读 · 2 评论 -
趋势的一道题2
#includetemplatevoid func(const int &t){ cout<<t+100<<endl;} template void func(const T&t){ cout<<t;}int main(){ func(10.3); func(1000); return 0;}原创 2013-06-19 14:16:12 · 1016 阅读 · 0 评论 -
B树
用阶定义的B树B树又叫平衡多路查找树。一棵m阶的B树的特性如下:树中每个结点最多含有m个孩子(m >= 2)除根结点和叶子结点外,其它每个结点至少有ceil(m / 2)个孩子(ps:ceil(x)取x的上整数)若根结点不是叶子结点,则至少有2个孩子(特殊情况:没有孩子的根结点,即根节点为叶子结点,整棵树只有一个根结点)所有叶子都出现在同一层每个非终端结点中包含有n个关键字信息:(转载 2013-06-18 13:56:52 · 1311 阅读 · 0 评论 -
拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyint a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。转载 2013-06-18 10:36:03 · 1000 阅读 · 1 评论 -
堆与栈解析
在进行C/C++编程时需要程序员对内存的了解比较精确,经常使用到的内存有以下几种: 栈:由编译器自动分配和释放,存放函数的参数值、局部变量的值,操作方式类似于数据结构中的栈 堆:一般由程序员分配和释放,与数据结构中的堆是两码事,操作方式类似于链表 全局区(静态区):全局变量和静态变量的存储时放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变原创 2013-06-19 09:53:03 · 2153 阅读 · 4 评论 -
链表栈的实现
#include "iostream"using namespace std;typedef struct student{ int data; struct student * next;}node;//定义结构体节点typedef struct linkqueue{ node * first; node * rear;}stack;//定义队列结构,首指针和尾指针原创 2013-06-18 21:35:49 · 1194 阅读 · 0 评论 -
C语言中,static的作用?
(1)第一个作用:隐藏。当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。如果加了static,就会对其它源文件隐藏。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变原创 2013-06-09 09:40:44 · 989 阅读 · 0 评论 -
main函数之前还有代码吗?
main函数之前还有一些全局变量的初始化,对象的构造,main函数退出后会有全局变量的析构等原创 2013-06-09 09:31:06 · 795 阅读 · 0 评论 -
指针与引用的区别
区别1:指针在定义的时候不需要立即初始化,而引用在定义的时候必须初始化区别2:指针初始化之后可以改变指针的值,可以指向其他的地址;而引用一旦初始化就不能再改变区别3:指针可以指向一个空值,即允许存在一个空指针,而不允许存在一个指向空值的引用原创 2013-06-09 09:28:39 · 684 阅读 · 0 评论 -
在C++中调用c程序为什么需要C extern关键字
C extern关键字说明 ==> C与C++对函数名的处理是不一样的,在C++中会对函数名编译时加一些修饰符用以区分函数的重载等问题 ==> C编译的函数库,C++中声明与调用时,应指定extern“C”关键字,这样保证C++在编译时仍然采用C的方式编译函数名 ==> C++链接时就能找到正确的C函数 ==> extern“C”voidf(int a,char b);原创 2013-06-09 09:23:20 · 1049 阅读 · 0 评论 -
指针
1. 指针和地址 1.1 指针基本概念及其指针变量的定义 1.1.1 指针变量的定义 我们知道变量在计算机内是占有一块存贮区域的, 变量的值就存放在这块区 域之中, 在计算机内部, 通过访问或修改这块区域的内容来访问或修改相应的变 量。Turbo C语言中, 对于变量的访问形式之一, 就是先求出变量的地址, 然后 再通过地址对它进行访问, 这就是这原创 2013-06-09 08:55:51 · 877 阅读 · 0 评论 -
浅谈继承
一、什么叫继承?C++中提供了一种方法,可以从已有的类派生出新的类,而派生类继承了原有类(基类)的特征和方法,这叫做继承。通过继承,可以完成以下工作:1,可以在已有类的基础上添加新功能2,可以给类添加新的数据3,可以修改类的方法原始类叫作基类,继承类叫作派生类二、继承时的构造函数问题派生类不能直接访问基类的私有成员,而必须通过基类方法进行访问。创建派生类对象时,程序原创 2013-06-08 15:50:49 · 771 阅读 · 0 评论 -
给出一个单链表,不知道节点N的值,怎么遍历一次就可以求出中间节点
设立两个指针,比如*p和*q,p每次移动一个位置,q每次移动两个位置,q到达最后一个节点时,p到达中间节点原创 2013-06-09 10:36:35 · 1718 阅读 · 0 评论 -
socket中的recv/send阻塞与非阻塞区别
==> recv/send参数中都会指定length ==>阻塞式send:拷到发送缓冲区,如果缓冲区满,则需等待直到指定长度的数据发送到缓冲区 ==>非阻塞式send:一直拷贝,如果缓冲区满,也立即返回,并不等待。 ==>阻塞式recv:直到接到到指定长度的数据为止 ==>非阻塞式recv:立即返回,不管缓冲区里是否有数据,或者数据是否够指定长度,都立即返回原创 2013-06-09 09:29:48 · 1542 阅读 · 1 评论 -
c++里面的protect和public、private有什么区别?
public修饰的成员变量 在程序的任何地方都可以被访问,就是公共变量的意思,不需要通过成员函数就可以由类的实例直接访问private修饰的成员变量 只有类内可直接访问,私有的,类的实例要通过成员函数才可以访问,这个可以起到信息隐藏protected是受保护变量 类内和子类可直接访问,也就是说,基类中有protected成员,子类继承于基类,那么也可以访问基类的protected原创 2013-06-12 14:58:57 · 2417 阅读 · 0 评论 -
设置整型变量a的bit3
#define BIT3 (0x1<<3)static int a;void set_bit3(){a|=bit3;}原创 2013-06-11 13:49:02 · 2266 阅读 · 0 评论 -
C++字符数组越界问题的一个案例分析
2013-05-15 05:43 426人阅读 评论(3) 收藏 举报 我的学生yang1067155909给我来信,说的是C++第11周项目3 - CEmployee类继承自CPerson类中的一个细节:贺老师: 老师,m_szDepartment=new char[strlen(department)+1];为何需要+1呢?在测试里去掉+1后和这个效果一样啊转载 2013-05-27 15:18:55 · 994 阅读 · 0 评论 -
C Run-Time Library的理解
注: 以下内容部分引自CSND中相关讨论的帖子,仅供参考, 共同学习哈 *************************************** 1)运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“小内核”语言,就其语转载 2013-05-27 15:15:21 · 840 阅读 · 0 评论 -
论坛转帖,C与C++头文件
c++中 string与string.h 的作用和区别 #include void main() { string aaa= "abcsd d"; printf("looking for abc from abcdecd %s/n", (strcmp(aaa,"abc")) ? "Found" : "Not Found"); }转载 2013-05-27 15:13:44 · 954 阅读 · 0 评论