C/C++
huahuahailang
微信号:huahuahailang
欢迎一起技术交流。
展开
-
二、C++ 中的 虚函数与纯虚函数
虚函数是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的形式:virtual 函数返回值类型 虚函数名 (形参表){ 函数体}虚函数的主要作用是建立抽象模型,从而达到扩展系统的目的,虚函数扩展了派生类对象中隐藏基类函数的概念。 纯虚函数:class 类名{ virtual 类型 函数名原创 2013-03-14 16:09:58 · 635 阅读 · 0 评论 -
将链表逆序操作
已知链表的表头为head,写一个函数将链表逆序操作。采用逆插入的方法。#includeusing namespace std;typedef struct node{ char data; struct node *next;}Node;Node *Reverse(Node *head){ Node *temp=(Node*)malloc(sizeof(原创 2013-04-05 17:17:11 · 905 阅读 · 0 评论 -
编写类String的构造函数、拷贝构造函数、析构函数、赋值函数
代码:由类String 的定义,写出成员函数的实现。包括:构造函数、拷贝构造函数、析构函数、赋值函数 如下:class String{public: String(const char *str=NULL);//构造函数 ~String(void);//析构函数 String &operate=(const String &other);//赋值函数 Strin原创 2013-04-05 11:17:48 · 843 阅读 · 0 评论 -
bool 、int、float、指针变量与0比较的if语句
设变量为valbool:if (!val) int :if (val == 0) float :浮点型变量不精确,不能使用 if ( val == 0.0) ,应该使用>= 或者 const float a=0.0000001;if ((val>=-a) && (val 指针:if (val == NULL)原创 2013-04-05 13:41:02 · 940 阅读 · 0 评论 -
cout double 精度问题
#include#include//头文件要加using namespace std;int main(int argc,char *argv[]){ double k; k=2.021545522; cout<<setprecision(5)<<k<<endl; return 0;}原创 2013-03-22 15:35:12 · 1822 阅读 · 0 评论 -
C++中设置值的宽度,使用setw
C++中设置值的宽度,使用setw函数。如:#includecout输出:2空格空格空格 4空格空格即2占4位,4占3位。原创 2013-04-05 21:53:21 · 8170 阅读 · 1 评论 -
strlen ,sizeof 大小
char *hua="huahua";strlen(hua)=6;strlen 不包括 '\0' sizeof(hua)=7;包括'\0'char str[100];sizeof(str)=100;fun(char str[100]){ sizeof(str)=4;}void *p=malloc(100);sizeof(p)=4;原创 2013-04-05 11:39:36 · 446 阅读 · 0 评论 -
strcpy函数和strlen函数
完整的strcpy函数:char *strcpy(char *strDest,char *strSrc){ assert((strDest!=NULL)&&(strSrc!=NULL));//对源地址和目的地址加非0断言 char *address=strDest; while ((*strDest++=*strSrc++)!='\0') { ; } retu原创 2013-04-06 14:05:17 · 861 阅读 · 0 评论 -
C语言面试题大汇总之华为面试题 .
C语言面试题大汇总之华为面试题 Eddy整理1、局部变量能否和全局变量重名? 答:能,局部会屏蔽全局。要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局转载 2013-04-06 08:55:47 · 1854 阅读 · 0 评论 -
程序改错题
一、下面程序有什么错误:swap(int *p1,int *p2){ int *p; *p=*p1; *p1=*p2; *p2=*p;}//这里p是一个野指针,应改为:void swap(int *p1,int *p2){ int p; p=*p1; *p1=*p2; *p2=p;}//可以实现函数外部*p1 *p2的交换void s原创 2013-04-06 11:26:44 · 4736 阅读 · 1 评论 -
VC++ 中LInk2001 、C2001、C2005、C2011出错原因
Link2001是链接程序不能在所有的库和目标文件内找到引用是函数、变量、标签等。原因:1、使用了不同版本的链接库2、声明的函数、变量不存在。C2001、编译器错误。常数中有换行符。C2005:编译器错误。如 格式#line i如果i没有写的话,会出现这种错误。C2011:类型重定义原创 2013-04-07 15:23:01 · 1995 阅读 · 0 评论 -
继承和多态有何区别
在OOD和OOP中,多态组合优于继承,多态的基础是继承,没有继承,多态就无从谈起。1、当对象的类型不影响类中的行为时,就要使用模板来生成这样的一组类2、当对象的类型影响类中的行为时,就要使用继承来生成这样的一组类。原创 2013-04-07 15:43:41 · 1574 阅读 · 0 评论 -
C、C++最大值、最小值初始化
#include int max = INT_MIN; /* 用最小值初始化 */ int min = INT_MAX; /* 用最大值初始化 */原创 2013-04-22 21:41:37 · 4260 阅读 · 2 评论 -
C++ 显示系统时间重载
#include#includeusing namespace std;void display(tm *tim){ cout<<"time:"<<asctime(tim)<<endl;}void display(time_t *tim){ cout<<"now:"<<ctime(tim)<<endl;}int main(){ time_t ti原创 2013-04-30 11:02:49 · 697 阅读 · 0 评论 -
随笔二
1、a)一个有10个指针的数组,该指针是指向一个整型数;b)一个指向有10个整型数数组的指针;c)一个指向函数的指针,该函数有一个整型参数并返回一个整型数;d)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数a)int *a [10];b) int (*a)[10];c)int (*a)(int)d) int( *a[10])(int原创 2013-10-05 12:08:35 · 1063 阅读 · 0 评论 -
随笔一
1、什么是析构函数? 与构造函数的区别是什么?析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。 以C++语言为例,析构函数名也应与类名相同,只是在函数名前面加一个波浪符~,例如~stud原创 2013-10-02 17:49:57 · 1069 阅读 · 0 评论 -
写一个标准宏MIN,输入两个参数,返回较小的
写一个标准宏MIN,输入两个参数,使得下面的函数返回较小的。least = MIN(*p++,b); 错误的解法: #define MIN(a,b) (a>=b?b:a)#define MIN(a,b) (a)>=(b)?(b):(a) 正确的解法:#define MIN(a,b) ((a)>=(b)?(b):(a))但是:MIN(*p++,b)原创 2013-04-05 13:25:05 · 5902 阅读 · 0 评论 -
标准头文件的问题 #ifndef
标准头文件中有如下结构:#ifndef __INCvxWorksh#define __INCvxWorksh#ifdef __cplusplusextern "C"{ #endif /**/ #ifdef __cplusplus};#endif#endif /* __INCvxWorksh */ 这是为啥?头文件中的编译宏的作用是防止被重原创 2013-04-05 13:12:07 · 1079 阅读 · 0 评论 -
三、C++ const 对象的指针与 const指针
const 指针的值不可以被修改,但是,可以使用该指针修改所指向对象的值,指向const变量的指针不可以修改所指向的const变量的值。但是自身可以被重新赋值。 const double *ptr;//ptr指针是指向const对象的指针,可能指向一个类型为double的常量值。//可以使用 const void *来保存const对象的地址const int a=34;const v原创 2013-03-14 16:50:06 · 578 阅读 · 0 评论 -
六、C++ this 指针
this指针是一个隐含的指针,它是指向对象本身的,表示当前对象的地址。在非const 成员函数里,this的类型是 a*在const成员函数里,this的类型是const a*this不是一个常规变量,不可以给它赋值,不可以获取它的地址。 void Date::setMonth(int mn){ //三句话等价,this表示当前对象的地址。 month= mn;原创 2013-03-14 21:52:44 · 558 阅读 · 0 评论 -
四、C++ 数组指针 与 指针数组
数组指针:指向数组的指针,是一个指针变量指针数组:数组中的每一个元素都是指针,它的元素可以指向相同类型的不同对象。 //数组指针 int (*ap)[2];//定义指向包含有两个元素的数组的数组指针 //指针数组 char *arr[]={"hfa","guang","lu"}; cout<<*(arr+1)<<endl; cout<<*arr+1<<endl;原创 2013-03-14 17:20:29 · 738 阅读 · 0 评论 -
五、C++ 函数指针 与 指针函数
函数指针:指向函数的存储空间地址的指针,本质是一个指针。int (*fun)(int x); 指针函数:返回值为指针,本质是一个函数int * fun(int x);//函数返回一个指向整型数据的地址指针 #includeusing namespace std;//函数指针int f(int x,int y){ int z; z=x>y?x原创 2013-03-14 20:44:18 · 565 阅读 · 0 评论 -
用C语言将一个字符串转换成整型
采用C语言库函数来写程序:函数:atol: long atol (const char *ptr ) 功能:把一个字符串转换成整型#includeusing namespace std;int main(int argc, char* argv[]){ long l; char *str="0123456789"; l=atol(str);原创 2013-04-01 10:51:29 · 1535 阅读 · 0 评论 -
关于C/C ++ 编译器的问题
如何判断一段程序是由C编译器编译的还是由C++编译器编译的?这个要通过代码来实现。如果用C++编译程序的话,系统会自定义一个宏:__cplusplus代码如下:#includeusing namespace std;int main(){#ifdef __cplusplus cout<<"C++";#else cout<<"C";#endif c原创 2013-04-01 14:56:00 · 483 阅读 · 0 评论 -
数组与指针的区别
数组在静态存储区被创建(如全局数组),或者在栈上被创建。指针可以随时指向任意类型的内存块。 一、修改内容上的区别:程序如下:#includeusing namespace std;int main(){ char hua[]="huahua"; char *p="lululu"; hua[0]='k'; p[0]='k'; cout<<hua<<原创 2013-04-01 15:10:22 · 555 阅读 · 0 评论 -
写一个strcpy函数的实现
strcpy函数的原型为 char *strcpy( char * strDest, const char * strSrc ) 代码如下:#include#includeusing namespace std;char *strcpy_hua(char *dest,const char *src){ char *temp=dest; if原创 2013-04-01 16:47:23 · 1120 阅读 · 0 评论 -
main ()函数执行完后是否会再执行一段代码?
在main()函数执行完后会再执行一段代码,进行处理操作。可以使用atexit()函数。main函数退出后执行的函数。#includeusing namespace std;void fn1(){ cout<<"next \n";}void fn2(){ cout<<"is ";}void fn3(){ cout<<"this ";}vo原创 2013-04-01 19:07:20 · 842 阅读 · 0 评论 -
一个关于指针的问题
阅读代码,分析输出结果:#includeusing namespace std;int main(){ int c[3][3]={1,2,3,4,5,6,7,8,9}; cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl; for (int i=0;i<3;i++) { for (int j=0;j<3原创 2013-04-01 18:41:10 · 576 阅读 · 0 评论 -
char ** str的使用方法:动态内存分配-------二维指针
直接上代码:看了就懂了。#includeusing namespace std;int main(int argc,char *argv[]){ char **str; int i,j; char ch; str=(char **)malloc(sizeof(char*)); cout<<"输入字符串,以@结束:"<<endl; fflush(stdin原创 2013-03-28 21:48:28 · 1307 阅读 · 0 评论 -
按要求输出时间
编写函数,要求输入年、月、日、时、分、秒,输出该年、月、日、时、分、秒的下一秒。例如:输入:2004年12月31日23时59分59秒输出:2005年1月1日0时0分0秒程序如下:#includeusing namespace std;void NextTime(int *year,int *month,int *day,int *hour,int *minute,int原创 2013-04-01 17:39:08 · 833 阅读 · 0 评论 -
打印出当前文件的文件名和当前行号
打印出当前文件的文件名和行号:printf("%s,%ld\n",__FILE__,__LINE__);原创 2013-04-01 19:19:08 · 971 阅读 · 0 评论 -
不用判断语句,求两个数中最大的那个数,
有两个int 变量A,B,不使用if. switch ?: 等判断形式,输出两个中的最大数: int max = ((a+b)+abs(a-b)) / 2 ;int min = ((a+b)-abs(a-b)) / 2 ;原创 2013-04-01 20:01:56 · 993 阅读 · 0 评论 -
一、C++ 分配与释放存储空间
C++ 中,用new 和 delete来分配和释放存储空间。#include#includeusing namespace std;int main(int argc,char *argv[]){ int *p=new int; *p=100;//如果写成:int *p; *p=100; 错误。 cout<<*p<<endl; delete(p); system("PA原创 2013-03-14 15:11:46 · 761 阅读 · 0 评论 -
随笔三
1、共享内存,管道,文件,socket传输的优缺点管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信;信号(Signal):信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除了用于进程间通信外,进程还可以发送信号给进程本身linux除了支持Un原创 2013-10-05 16:55:26 · 965 阅读 · 0 评论