c++
曾经的阿飞
这个作者很懒,什么都没留下…
展开
-
C++多态简要说明
虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。 下面是对C++的虚函数这玩意儿的理解。 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始) 简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性 (Polymorphism),多态性是将接口与实现进行分离;用转载 2008-05-17 16:34:00 · 647 阅读 · 0 评论 -
c/c++ 数字和字符串之间的转化
#include using namespace std;int main(){ int num = 10; char str[100]; //itoa第一个参数表示int型,第二个参数表示要转化成的string,第三个参数表示要转化成的进制。 itoa(num, str, 2); cout<<str<<endl; long l1=10; ltoa(l转载 2009-09-03 23:17:00 · 549 阅读 · 0 评论 -
c语言中static类型
静态变量都存储与静态存储区中。 1. 静态局部变量静态局部变量属于静态存储方式,它具有以下特点:(1)静态局部变量在函数内定义 它的生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。(2)允许对构造类静态局部量赋初值 例如数组,若未赋以初值,则由系统自动赋以0值。(3)对基本类型的静转载 2009-09-04 01:42:00 · 650 阅读 · 0 评论 -
C/C++ 函数重载
#include using namespace std;void test(int i,int j=0){}void test(int i){}int main(){ //test(1); return 0;} 上面的程序编译可以通过,但是在main函数中调用test(1)的时候会出现ambiguous,编译器不知道该调用上面的那个原创 2009-09-05 16:48:00 · 587 阅读 · 0 评论 -
欧几里德算法(辗转相除法) 求最大公约数
转自:http://www.cnblogs.com/dah/archive/2007/03/06/666114.html 今天上课老师问"辗转相除法"又叫什么算法..居然没人知道..更居然的是..老师也忘了...以前我貌似在VC的Samples里看到过这个算法, 似乎是叫欧几里德... 但也忘了是怎么辗转相除的.. 特此"百度知道"之:Euclid欧几里德算法又转载 2009-09-15 23:09:00 · 1033 阅读 · 0 评论 -
bitset用法总结
一般而言,标准库提供的bitset操作更直接、更容易阅读和书写、正确使用的可能性更高。而且,bitset对象的大小不受unsigned数的位数限制。通常来说,bitset优于整形数据的低级位操作。 bitset的几个操作和位运算之间的转化。bitset bs(88);unsigned long l=88;bs.set(6);l |= 1ULbs.reset(6);l原创 2009-09-27 18:34:00 · 919 阅读 · 0 评论 -
对象初始化时发现的一个问题
请问下面那句话编译不通过?struct test{ test(int ){} test(){} void fun(){} }; int main() { test t1(1);//第一句 t1.fun()://第二句 test t2();//第三句 t2.fun()://第四句 }原创 2009-09-29 10:04:00 · 449 阅读 · 0 评论 -
自增运算符的副作用
原文地址:http://www.titilima.cn/show-234-1.html 结论:vs2008 一、先计算完所有的++i 将i的结果放入i中 二、计算机表达式的值 三、再计算所有的i++G++也是先忽略i++,不过和vs2008区别之处在于不是先计算完所有的++i,再计算机表达式,而只是对每一个运算符先计算++i 好了,就从最为臭名昭著的“(++i) +转载 2009-09-23 17:14:00 · 718 阅读 · 0 评论 -
c++ 类的大小
#include using namespace std;class A1{ char c1; short i; virtual void test(){} static char c2;};class A2:public A1{ int i; virtual void test(){}};int m原创 2009-09-24 15:39:00 · 432 阅读 · 0 评论 -
组合,关联,聚合的区别
类间关系在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义。在UML类图中,关系用类框之间的连线来表示,连线上和连线端头处的不同修饰符表示不同的关系。类之间的关系有继承(泛化)、关联、聚合和组合。(1)继承:指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己转载 2009-09-29 15:23:00 · 527 阅读 · 0 评论 -
c++模板函数在返回值时使用类型型参
只有在最右边的型参的显示模板型参才可以忽略,规则和默认参数一样。 #include using namespace std;template t1 test(t2 a,t3 b){t1 temp;return temp;}int main(){ test(1,2); test(1,2); test(1,2); return 1;原创 2009-10-19 01:25:00 · 2364 阅读 · 0 评论 -
B树,B_树,B+树,B*树
转自:小彰的博客 B树即二叉搜索树:1. 所有非叶子结点至多拥有两个儿子(Left和Right);2. 所有结点存储一个关键字;3. 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;如:B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿转载 2009-10-20 14:51:00 · 543 阅读 · 0 评论 -
(int&)a和(int)a的区别
#include #include #include using namespace std;int main(){ float a = 1.0f; cout << (int)a << endl; cout << (int&)a << endl; cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出转载 2009-11-06 15:18:00 · 599 阅读 · 0 评论 -
constructor中的template模式的探讨
在网上看到了一个pplive的面试题,在csdn上面跟网友探讨了一下,分享一下:#include using namespace std;class A{public:A(){ doSth(); }virtual void doSth(){ printf("I am A");}};class B:public A{public:virtual vo原创 2009-11-08 17:46:00 · 549 阅读 · 0 评论 -
表达式求值的程序
没事干自己写了个表达式求值的程序,欢迎个位指正。#include #include #include using namespace std;const char operators[]={),+,-,*,/,(};void calculate(stack& stack_operator,stack& stack_number){ int原创 2009-11-02 01:15:00 · 787 阅读 · 0 评论 -
C/C++ 宏带来的奇技淫巧
1. 宏可以像函数一样被定义,例如: #define min(x,y) (x 但是在实际使用时,只有当写上min(),必须加括号,min才会被作为宏展开,否则不做任何处理。2. 如果宏需要参数,你可以不传,编译器会给你警告(宏参数不够),但是这会导致错误。如C++书籍中所描 述的,编译器(预处理器)对宏的语法检查不够,所以更多的检查性工作得你自己来做。3. 很多程序转载 2009-09-04 15:24:00 · 726 阅读 · 0 评论 -
c/c++函数指针
char (*(*x())[])();这道题来自”The C Programming Language”中的一个例子。首先,确定标识符:xx是一个函数,没有参数:x()返回值是一个指针:*x()这个指针指向一个数组:(*x())[]数组中的每个元素是指针:*(*x())[]指向一个不带参数的函数:(*(*x())[])()函数的返回值是char:char (*(*x原创 2009-09-04 18:57:00 · 516 阅读 · 0 评论 -
c/c++ struct的大小以及sizeof用法
写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧./******************************分割线如果体系结构是不对齐的,A中的成员将会一个挨一个存储,从而sizeof(a)为11。显然对齐更浪费了空间。那么为什么要使用对齐呢?体系结构的对齐和不对齐,是在时转载 2009-09-03 22:05:00 · 4717 阅读 · 0 评论 -
C++ const关键字说明
C++中的const意味着“只读”,合理的使用const将大大改善程序的健壮性:1)声明一个参数为常量是可以向用户传达有用的信息,告知这个参数的应用目的。在规模稍大一点的软件开发中,可以减少阅读程序的人的困惑,避免其他接手工作的程序员花时间清理无用的垃圾。懂得用const的程序员很少会留下的垃圾让别人来清理。2)const关键字通过给优化器一些附加的信息,产生更紧凑的代码。3)合理地转载 2008-05-17 16:35:00 · 641 阅读 · 0 评论 -
头文件和源文件关联的问题
(对标题的解释:标题中的“源文件”是狭义的概念。小弟只是为了区分,把.h文件称为“头文件“,把.cpp文件称为“源文件“。) 今 天有个同事来问我#include 和#inlcude “xxx.h”的区别(关于这个问题,网上已经说滥了,而且林锐博士的《高质量C++/C编程指南》也作了说明)。从这个问题,偶引申出好几个问题,不得 已,又去往上”狗狗”了(惭愧的很啊,每次都只能去”狗狗转载 2008-05-17 16:40:00 · 879 阅读 · 0 评论 -
c++ 常见问题
1,如何使程序暂停,观察程序的输出?#include 使用getch()方法。2,字符串常量″abc″在内存中占4个字节(而不是3个字节),编译系统会在字符串最后自动加一个′\0′作为字符串结束标志。但′\0′并不是字符串的一部分,它只作为字符串的结束标志。注意: ″a″和′a′代表不同的含义,″a″是字符串常量,′a′ 是字符常量。前者占两个字节,后者占1个字节。 3,#include 使用原创 2008-05-17 17:05:00 · 739 阅读 · 0 评论 -
C++抽象类
一、定义. 纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0” virtual void funtion1()=0 二、引入原因: 1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。 2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本转载 2008-05-17 17:18:00 · 4111 阅读 · 0 评论 -
c c++中的volatile关键字
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改。 用volatile关键字声明的变量i每一次被访问时,执行部件都会从i相应的内存单元中取出i的值。 没有用volatile关键字声明的变量i在被访问的时候可能直接从cpu的寄存器中取值(因为之前i被访问过,也就是说之前就从内存中取出i的值保存到某个寄存器中),之所以直接从寄存器转载 2009-08-28 20:37:00 · 497 阅读 · 1 评论 -
浮点数在计算机中存储方式
作者: jillzhang 联系方式:jillzhang@126.com 本文为原创,转载请保留出处以及作者, 谢谢 C语言和C#语言中,对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用64bit,我们在声明一个变量float f= 2.25f的时候,是如何分配内存的呢?转载 2009-08-29 01:12:00 · 636 阅读 · 0 评论 -
c和c++中的struct有什么不同
c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private。原创 2009-08-28 20:47:00 · 925 阅读 · 0 评论 -
出现频率最高的笔试题strcpy写法
题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。 解说: 1.strcpy的实现代码 char * strcpy(char * strDest,const char转载 2009-08-28 21:39:00 · 399 阅读 · 0 评论 -
sprintf或printf格式化short类型
printf格式化int型很简单,只要printf("%d", (int)89) ,即可输出89,那么要输出short型呢?printf并没有给出类似于%d的格式字符串来格式化short型.从printf函数原理来说,函数根据前面的格式字符串来强硬转换后面的参数,比如碰到%d,就表示要将参数强硬转换为int型,如果你传入的参数是short型,short型只要两个字节,那么强硬转换为int(转载 2009-08-30 22:46:00 · 8186 阅读 · 0 评论 -
c/c++经典笔试题大全
unsigned short A = 10; printf("~A = %u/n",~A); char c=128; printf("c=%d/n",c); 输出多少?并分析过程答案:第一题,~A =0xfffffff5,int值 为-11,但输出的是uint。所以输出4294967285 第二题,c=0x10,输出的是i原创 2009-08-30 23:00:00 · 819 阅读 · 0 评论 -
c++primer一道习题-多态
原帖子地址:http://topic.csdn.net/u/20090829/11/e6ffa5bf-98bf-4c4a-84f7-bc296f3e8bde.html?seed=1086748632&r=59432039#r_59432039假定Derived继承Base,并且Base将下面的函数定义为虚函数;假定Derived打算定义自己的这个虚函数的版本,确定在Derived中哪个声明原创 2009-08-30 03:12:00 · 906 阅读 · 0 评论 -
c++数组初始化
一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1.调试的时查看内存发现不是那么一回事,翻了一下《The C++ Programming Language》总算有定论。PDF的竟然不然复制,就把它这章翻译了,如下5.2.1 数组初始化 数组可以用一个列值来初始化,例如 int v1[] ={1,2,3,4原创 2009-09-02 23:00:00 · 1132 阅读 · 0 评论 -
c++ float类型和0进行比较
#include #include using namespace std;int main(){ float f; if(f-FLT_EPSILON);}原创 2009-09-03 00:47:00 · 2168 阅读 · 0 评论 -
c/c++printf参数计算顺序
c/c++printf参数计算顺序:从右向左,以下测试程序在vs2008和GCC下输出为: 8,86,5 #include using namespace std;int main(){ int arr[]={6,7,8,9,10}; int *ptr=arr; *(ptr++)+=123; printf("%d,%d/n",*ptr,*(++ptr原创 2009-09-03 14:48:00 · 840 阅读 · 0 评论 -
通用向上取整算法
(A+B-1)/B转载 2010-08-21 18:38:00 · 4872 阅读 · 0 评论