摘要:
常见的不不能声明为虚函数的有:普通函数(非成员函数);静态成员函数;内联成员函数;构造函数;友元函数。1、为什么C++不支持普通函数为虚函数? 普通函数(非成员函数)只能被overload,不能被override,声明为虚函数也没有什么意思,因此编译器会在编译时邦定函数。2、为什么C++不支持构造函数为虚函数? 这个原因很简单,主要是从语义上考虑,所以不支持。因为构造函数本来就是为了明确初始化对象成员才产生的,然而virtual function主要是为了再不完全了解细节的情况下也能正确处理对象。另外,virtual函数是在不同类型的对象产生不同的动作,现在对象还没有产生,如何使用virt.. 阅读全文
摘要:
1 #include 2 #include 3 4 #define PERR printf("FILE: %s, FUNCTION: %s, LINE: %d\n",\ 5 __FILE__, __func__, __LINE__) 6 7 struct Tnode 8 { 9 struct Tnode *next; 10 int value; 11 }; 12 13 void Del_Repeat_Node(struct Tnode **head) 14 { 15 ... 阅读全文
摘要:
1 #include 2 3 #define N 4 4 5 typedef struct Block 6 { 7 char buffer[N]; 8 struct Block *next; 9 }Block;10 11 typedef struct12 {13 Block *head;14 Block *tail;15 int len;16 }BLString;17 18 19 void BLStringAppend(BLString* s1, BLString* s2)20 {21 if(NULL == s1 || NU... 阅读全文
摘要:
顺序存储表示是将数据元素存放于一个连续的存储空间中,实现顺序存取或(按下标)直接存取。它的存储效率高,存取速度快。但它的空间大小一经定义,在程序整个运行期间不会发生改变,因此,不易扩充。同时,由于在插入或删除时,为保持原有次序(没有规定元素进栈顺序),平均需要移动一半(或近一半)元素,修改效率不高。链接存储表示的存储空间一般在程序的运行过程中动态分配和释放,且只要存储器中还有空间,就不会产生存储溢出的问题。同时在插入和删除时不需要保持数据元素原来的物理顺序,只需要保持原来的逻辑顺序,因此不必移动数据,只需修改它们的链接指针,修改效率较高。但存取表中的数据元素时,只能循链顺序访问,因此存取效率不 阅读全文
摘要:
/*(豆瓣2013面试题strstr) 有一个在给定字符串中查找子串的函数strstr, 该函数从给定的字符串src中查找substr并返回一个整数, 指明substr第一次出现的位置(从0开始计数),如果找不到则返回-1。说明: 1、代码中不允许使用系统已有的库函数,所有用到的库函数都需要自己实现 2、允许使用任何编程语言,函数原型自行给定。参考的C语言函数原型为 int strstr(char* src , char* substr) *//*算法: 只要将src中长度为substr的子串拿出来和substr比较是否相等即可, 则从前往后拿出子串,第一个相等的即可*///时间复杂度: O( 阅读全文
摘要:
给定一个如下格式的字符串(1,(2,3),(4,(5,6),7))括号内的元素可以是数字,也可以是另一个括号,请实现一个算法消除嵌套的括号,比如把上面的表达式变成:(1,2,3,4,5,6,7),如果表达式有误请报错。时间复杂度0(n),空间复杂度为O(1) 1 #include 2 int is_rights(char ch)//判断右括号 3 { 4 if( ch == ')' ) 5 return 1; 6 else 7 return 0; 8 } 9 int is_left(char ch)//判断左括号10 {11 if(ch... 阅读全文
摘要:
http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html#mainui 阅读全文
摘要:
C语言序列点总结 2013年11月21于浙大华家池C 语言副作用:(side effect)是指对数据对象或者文件的修改。例如,语句 v = 99;的副作用是把 v 的值修改成 99。C语言序列点:(sequence point)是指程序运行中的一个特殊的时间点,在该点之前的所有副作用已经结束,并且后续的副作用还没发生,而两个序列点之间所有的表达式或代码执行顺序是未定义的。1). 一个重要的序列点在完整表达式的结尾(即分号),所谓完整表达式,就是说这个表达式不是子表达式。而所谓的子表达式,则是指表达式中的表达式。也就是说,C 语句中由赋值、自增或者自减等引起的副作用在分号(序列点)之前必须.. 阅读全文
摘要:
给定一个数组将大于0的放在最右边,等于0的放在中间,大于0的放在最左边; 1 #include 2 #include 3 #include 4 #define random (rand()%10-5) 5 void swap(int *a, int *b)//交换两个整型数 6 { 7 int t = *a; 8 *a = *b; 9 *b = t;10 }11 12 void move_array(int a[], int n)13 {14 int *low = a, *high = a + n-1;15 while(low 0 && high... 阅读全文
摘要:
今天写了个消息队列的小测试程序结果send端程序总是出现:msgsnd: Invalid argument,搞了半个小时也没搞明白,后来查资料发现我将(st_msg_buf.msg_type = 0; //设置消息类型)设置为0了,原来0表示是任意类型的消息,只有recv端才可以设置为0表示:可以接受任意类型消息。代码:发送端源代码: 1 #include 2 #include 3 #include 4 #include 5 6 #include 7 #include 8 #include 9 10 #define MAX_TEXT 51211 #define BUF... 阅读全文