c++
主的器皿
这个作者很懒,什么都没留下…
展开
-
虚继承防止多重继承产生的二义性问题
虚基类:有virtual关键字的类。 class base class derived1 : virutal public base class derived2 : virtual public base class derived3 : public derived1, public derived2 如果用到了base中的某个成员变量就不会产生原创 2012-06-05 16:48:31 · 1382 阅读 · 0 评论 -
c++基础题
答案是我自己写,不一定对,如果有朋友看到不对的,欢迎指正,万分感谢!1. 一个指针类型的对象占用内存的4个字节的存储空间.2. 一个指针类型指向一个数据对象,它保存着该数据对象的 地址 ,若数据对象为DataType类型,则该指针的类型为DataType*.3. 若要把一个整形指针P转换为字符指针,则采用的强制转换表达式为(char*)p.4. 假定一个原创 2013-06-21 10:27:56 · 1149 阅读 · 0 评论 -
参数 指针
一、对参数指针的地址修改参数的地址是可以修改的,修改后的地址是不可能传回给调用处的指针变量。#include #include #include int subFunc(int arr[3]);//交换两整数void change(int *data1, int *data2) { int *temp; //交换两数的地址 temp = da原创 2013-06-21 16:07:48 · 877 阅读 · 0 评论 -
free野指
野指针的成因主要有三种: 一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。 二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。 别看free和delete的名字(尤其是delete原创 2013-06-21 16:44:41 · 737 阅读 · 0 评论 -
c++基础
(1)请写出 float x 与“零值”比较的 if 语句如下是错误的写法,不得分。if (x == 0.0)if (x != 0.0)标准答案示例:const float EPSINON = 0.00001;if ((x >= - EPSINON) && (x 不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成>=”或“(2)以下为Windows NT下原创 2013-06-21 17:48:47 · 629 阅读 · 0 评论 -
c++面试题
1、C++中为什么用模板类。 (1)可用来创建动态增长和减小的数据结构(2)复用性,可移植性,它在编译时而不是运行时检查数据类型,保证了类型安全.(3)可用于基本数据类型2、CSingleLock是干什么的。答:同步多个线程对一个数据类的同时访问3、函数模板与类模板有什么区别?答:函数模板的实例化是由编译程序在处理函数调用时自动完成的,而类模板的实例化必须由程序原创 2013-06-27 15:48:26 · 912 阅读 · 0 评论 -
C/C++面试题:class和struct有什么区别?
(1)C的struct与C++的class的区别。(2)C++中的struct和class的区别。在第一种情况下,struct中只能定义成员变量,不能定义成员函数。例如下面的C代码片断: struct Point { int x; // 合法 int y; // 合法原创 2013-06-27 15:53:48 · 1359 阅读 · 0 评论 -
c++面试题:STL
TL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库中,包括容器、算法、迭代器组件。vector内部使用动态数组的方式实现的。如果动态数组的内存不够用,就要动态的重新分配,一般是当前大小的两倍,然后把原数组的内容拷贝过去。所以,在一般情况下,其访问速度同一般数组,只有在重新分配发生时,其性能才会下降。它的原创 2013-06-27 16:26:00 · 1198 阅读 · 0 评论 -
C++项目中的extern "C" {}
引言在用C++的项目源码中,经常会不可避免的会看到下面的代码:?123456789#ifdef __cplusplusextern"C" {#endif /*...*/ #ifdef __cplusplus}#endif它到底有什么用呢,你知道吗?原创 2013-07-03 16:56:21 · 672 阅读 · 0 评论 -
C++ - char** argv vs. char* argv[]
What is the difference between char** argv and char* argv[]?int main(int argc, char** argv) andint main(int argc, char* argv[])?t's a language rule. When you declare or define a function with the原创 2013-07-04 18:48:52 · 1512 阅读 · 0 评论 -
内联函数
(1) 什么是内联函数?函数的函数体放在类体内。(2)为什么要引入内联函数?内联函数存储在静态全局区。解决一些频繁调用的小函数大量消耗栈内存的问题,(3)内联函数和宏的区别?宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。取消了函数的参数压栈,减少了调用的开销(4)什么时候用内联函数?一般用来定义读写函数。读写私有或受保护的成员数据。读写函数改写成内联原创 2012-06-05 16:06:10 · 465 阅读 · 0 评论 -
指针
指针是一个特殊的变量,它存储内存里的一个地址。指针四方面的内容:指针的类型,指针所指向的类型,指针的值或指针所指向的内存区,指针本身所占据的内存区。例一: (1)int *ptr; (2)char *ptr; (3)int **ptr; (4)int (*ptr)[3]; (5)int *(*ptr)[4];转载 2012-06-06 13:01:45 · 497 阅读 · 0 评论 -
两道出现频率超高的C++笔试题
两道出现频率超高的C++笔试题:已知strcpy函数的原型是:char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。2.解释为什么要返回char *。解说:1.strcpy的实现代码char * strcpy(char * strDest,const char *原创 2013-07-01 09:57:00 · 750 阅读 · 0 评论 -
c
(1)splint tool(2)gcc -o pun pun.cc(3)printf("Height: %d Length: %d\n",height,length); %d int printf("Profit: $ %f\n",profit); Profit: $2580.000000 默认6位 printf("Profit: $ %.2f\n",profit); P原创 2013-07-01 09:58:43 · 707 阅读 · 1 评论 -
友元函数和友元类
采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和原创 2013-06-14 15:49:18 · 576 阅读 · 0 评论 -
C++中const、volatile、mutable的用法
const修饰普通变量和指针const修饰变量,一般有两种写法:const TYPE value;TYPE const value;这两种写法在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。对于一个非指针的类型TYPE,无论怎么写,都是一个含义,即value值不可变。例如:const int nValue; //nValue原创 2013-06-14 14:41:16 · 841 阅读 · 0 评论 -
内存堆栈
堆:类似队列 栈:先进后出 程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等。操作方式类似于数据结构中的栈。只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则栈溢出。在 WINDOWS下,栈的大小是2M,,是一块连续内存区域。在函数调用时,第一个进栈的是主函数后的下一条指令、然后原创 2012-06-05 17:17:32 · 432 阅读 · 0 评论 -
函数cin.get、 cin.getline 、getline、 gets
1.cin.get() 接收1个字符或字符数组。#includeusing namespace std;void main(){ char ch1, ch2[20]; cin.get(ch1);//只接收1个字符 cin.get(ch2,20);//接收19个字符加1个'\0' cout}2.cin.getline()接收字符原创 2012-06-05 23:27:26 · 376 阅读 · 0 评论 -
函数memset、memcpy、strcpy
1. void *memset(void *s,int c,size_t n) //将已开辟内存空间 s 的首 n 个字节的值设为值 c。 用处:常用于初始化内存空间(一般为字符)或者清空数组或结构体类型。 例如:char str[100]; memset(str,0,sizeof(str));struct sample_s原创 2012-06-05 23:04:48 · 399 阅读 · 0 评论 -
宏二义性的问题
#include using namespace std;#define sqr(x) (x*x)int main(){int a,b=3;a = sqr (b+2);printf("%d",a);return 0;}答案是11而不是25,原因是预编译宏展开的时候,被展开成了b+2*b+2。将x括起来,改成如下程序#include us原创 2012-06-05 16:14:21 · 1282 阅读 · 0 评论 -
const应用实例
const int a=100; int const b=100; int* m = &a; //出错,常量只能用常指针int c= 1;const int*pc = &c;//常指针可指向常量 const int* pa = &a; //指针指向的内容为常量(就是a的值不变)int const *a = &b; //指针指向的内容为常量(就是b的值不变)*p=3//err原创 2012-06-06 14:23:34 · 557 阅读 · 0 评论 -
函数sscanf、sscanf_s
1. 常见用法。 charstr[512]={0}; sscanf("123456","%s",str); printf("str=%s",str); 2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。 sscanf("123456","%4s",str); printf("str=%s",str); 3. 取到指定字原创 2012-06-06 14:45:11 · 1548 阅读 · 0 评论 -
函数sizeof、strlen
例子:char* ss = "0123456789";sizeof(ss) 结果 4 //ss是指向字符串常量的字符指针sizeof(*ss) 结果 1 //*ss是第一个字符char ss[] = "0123456789";sizeof(ss) 结果 11 //ss是数组,计算到\0位置,因此是10+1sizeof(*ss) 结果 1 //*ss是第一个字符c原创 2012-06-07 13:06:33 · 403 阅读 · 0 评论 -
warning: extra tokens at end of #include directive
用gcc编译源文件时出现的.这个错误究其原因应该是这个:某些自定义函数在头文件中声明了,在实现文件却没有用到。原创 2012-06-20 14:56:23 · 10073 阅读 · 0 评论 -
IBM笔试题3
c++中引用和指针有什么不同?指针加上什么限制等于引用?引用:引用是在变量表中增加该变量的别名,本身不占用内存空间,一旦确定不能更改。指针:指针是一个变量,本身占用内存空间,存储另一个变量的地址,可以重新赋值。指针添加const,功能作用和引用相同,但有本质区别。原创 2013-01-16 09:32:51 · 532 阅读 · 0 评论 -
IBM笔试题4
inline内联函数和宏的区别:内联函数在出现的地方展开,避免函数调用的出栈入栈,类中实现的函数自动为内联函数。宏:简单的替换。没有类型安全机制。原创 2013-01-16 09:56:44 · 721 阅读 · 0 评论 -
浅谈C/C++中的static和extern关键字
static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性。extern, "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明。一.C语言中的static关键字在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不尽相同。(1)修饰局部原创 2013-05-11 19:30:16 · 704 阅读 · 0 评论 -
inline内联函数与宏
(二)内联函数的编程风格关键字inline 必须与函数定义体放在一起才能使函数成为内联,仅将inline 放在函数声明前面不起任何作用。如下风格的函数Foo 不能成为内联函数:inline void Foo(int x, int y); // inline 仅与函数声明放在一起 void Foo(int x, int y){} 所以说,C++ inline函数是一种“用原创 2013-06-06 21:03:37 · 852 阅读 · 0 评论 -
C++构造函数后面的冒号
构造函数后加冒号是初始化表达式:有四种情况下应该使用初始化表达式来初始化成员:1:初始化const成员2:初始化引用成员3:当调用基类的构造函数,而它拥有一组参数时4:当调用成员类的构造函数,而它拥有一组参数时。在程序中定义变量并初始化的机制中,有两种形式,一个是我们传统的初始化的形式,即赋值运算符赋值,还有一种是括号赋值,如: int a=10; ch原创 2013-06-14 14:09:54 · 29574 阅读 · 3 评论 -
static_cast
用法:static_cast ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以原创 2013-06-14 14:58:00 · 735 阅读 · 0 评论 -
模板Template
模板(Template)指C++程序设计语言中的函数模板与类別模板,大体对应于java和C#中的泛型。目前,模板已经成为C++的泛型编程中不可缺少的一部分。模板定义以关键字template开始,后接模板形参表,模板形参表是用尖括号括住的一个或者多个模板形参的列表,形参之间以逗号分隔。 模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。非类型形参跟在类型说明符之后声明。类型形原创 2013-06-14 15:18:50 · 874 阅读 · 0 评论 -
c++基础
1.引用与指针有什么区别?引用要初始化,不能初始化为空,初始化后不能改变指向的地址,sizeof得到的是引用指向对象的大小.指针可不初始化,可初始化为空,初始化后可以改变指向的地址,sizeof得到的是指针本身的大小。两者自增运算意义不同。2.全局和局部变量在内存中有什么区别?全局变量的存储区域是静态存储区,局部变量的存储区域是栈。3.什么是平衡二叉树?左右子树都是平衡原创 2013-06-21 13:21:36 · 785 阅读 · 0 评论