C++语言学习知识点.doc_第1页
C++语言学习知识点.doc_第2页
C++语言学习知识点.doc_第3页
C++语言学习知识点.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、下面通过一个例子说明基本格式输出函数的用法。例Ex_CoutFrmcout的格式输出#includevoidmain()intnNum=1234;doublefNum=12.3456789;cout1234567890endl;cout.width(10);coutnNumn;cout.width(10);coutfNumendl;/double型默认为6位有效数字coutcout.precision(4)endl;/结果为6coutfNumendl;cout.fill(#);cout.width(10);coutfNumendl;执行该程序,结果如下:注:cout.precision(4)指按四位有效数字输出结果,这个式子本身为6。2、 复合赋值实例:a*=b-4/c+d;等效于a=a*(b-4/c+d);。3、变量的强制数据类型转换: static_cast(expression)该运算符把expression转换为type-id类型。注意:static_cast不能转换掉expression的const、volitale、或者_unaligned属性。 dynamic_cast(expression)该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;如果type-id是类指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须是一个引用。 reinpreter_cast(expression)type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。 const_cast(expression)该运算符用来修改类型的const或volatile属性。除了const或volatile修饰之外,type_id和expression的类型是一样的。常量指针被转化成非常量指针,并且仍然指向原来的对象;常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。 A*pa=newA;B*pb=newB;void*pv=dynamic_cast(pa);/pv现在指向了一个类型为A的对象。 Const_cast()用于去掉数据的const、violate等属性。constA*pa=newA;/const对象A*pb;/非const对象/pb=pa;/这里将出错,不能将const对象指针赋值给非const对象pb=const_cast(pa);/现在OK了4、 某些不太常见的转义字符:符号含义符号含义v垂直制表r回车反斜杠?问号字符单引号字符”双引号字符0空字符ddd任意字符,三位八进制5、,=,=,!=其中,前4种的优先级相同且高于后面的两种。例如:a=bc等效于a=(bc)但关系运算符的优先级低于算术运算符(其他可参见表1.4)。例如:a=bc等效于a=(b3&2|84-!0最后结果为1。7、默认参数值可以是全局变量、全局常量,甚至是一个函数。但不可以是局部变量。8、函数递归的例子#includelongfactorial(intn);voidmain()coutfactorial(4)endl;/结果为24longfactorial(intn)longresult=0;if(n=0)result=1;elseresult=n*factorial(n-1);returnresult;9、递归函数不做内联函数。10、条件编译预处理:#ifdef/还有一种#ifndef#else#endif#if#elif.#else#endif11、 VC6.0开发环境中,ClassView标签显示当前工作区中工程的所有类、结构和全局变量。ResourceView标签显示当前工作区中工程的所有资源,包括:加速键表、位图、对话框、图标、菜单、工具栏、字符串表和版本信息。FileView标签显示当前工作区中工程的所有文件,包括:C+源文件、头文件、资源文件和外部文件。12、 Windows消息:窗口消息:WM_CREATE,WM_DESTROY,WM_CLOSE键盘消息:WM_CHAR,WM_KEYDOWN,WM_KEYUP鼠标消息:WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDBCLICK,WM_RBUTTONDOWN,WM_RBUTTONUP,WM_RBUTTONDBCLICK。 另一组窗口消息:WM_MOVE,WM_SIZE,WM_PAINT 焦点消息:WM_SETFOCUS,WM_KILLFOCUS 定时器消息:WM_TIMER13、(*p).show();对成员函数的访问是成立的,当构造函数重载时,可以按照初始化程度区分,MyClassob2;形式的初始化,要执行两次构造函数。14、初始化方式之一,以后采取这种方式初始化:classPoint/点类intx,y;public:Point(int,int);/构造函数Point:Point(intxx,intyy):x(xx),y(yy)/结尾没有分号15、创建新对象A时,若用另一个对象B来初始化,需使用拷贝构造函数:拷贝构造函数是一种特殊的构造函数,其形参为本类对象的引用。定义在或者声明在累的定义中(可以类外定哟)。16、如果在构造函数中通过new运算符动态申请了内存空间,需自定义析构函数显式地使用delete运算符释放该内存空间。(注意:析构函数不可重载)17、类中的数据成员是另一个类对象的情况称为类的组合(区别于拷贝构造函数,组合是两个不同的类)。组合类的构造函数形如:Whole:Whole(inti,intj,intk):two(i),one(j),date(k)/其中Whole为类名,two、one、date为三个part类18、break,跳出循环,提前结束循环体。而continue不终止循环,而只是跳过本次循环中循环体中剩余的语句,直接进入下一次循环。19、在C+中,要将整个数组作为参数传递给函数,大体上有两种格式:(1)数据类型函数名(数据类型数组名,int长度);(2)数据类型函数名(数据类型数组名长度);20、static int count;/这里如果写成static in tcount=0;就是错误的Int Internet:count=0;/静态成员的初始化注意:在类中声明常量,但不赋值,在构造函数初始化表中进行赋值。21、在访问类的成员时,推荐使用类名加作用域符的访问方式。22、静态成员函数与普通成员函数的差别就在于缺少this指针。23、if语句中不要将布尔变量与任何值进行比较,那会很容易出错的。整形变量必须要有类型相同的值进行比较。浮点变量最好少比点(相减趋近比较法),就算要比也要有值进行限制。指针变量要和NULL进行比较,不要和布尔型和整形比较。24、C+函数传参时,如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象的构造和析构。函数的类型不能省略,就算没有也要加个void。25、一个内存拷贝函数的实现体:void*memcpy(void*pvTo,constvoid*pvFrom,size_tsize)assert(pvTo!=NULL)&(pvFrom!=NULL);byte*pbTo=(byte*)pvTo;/防止地址被改变byte*pbFrom=(byte*)pvFrom;while(size-0)pbTo+=pbForm+;returnpvTo;26、内存的分配方式有三种(请记住,说不定那天去面试的时候就会有人问你这问题)静态存储区,是在程序编译时已经分配好的,在整个运行期间都存在,如全局变量、常量。栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放的内存。27、用new或malloc分配内存时,必须要对此指针赋初值。用delete或free释放内存后,必须要将指针指向NULL不能修改指向常量的指针数据。28、sizeof的问题:chara=”HelloWorld!”char*p=a;coutsizeof(a)endl;/12字节coutsizeof(p)endl;/4字节。而且,在函数中,数组参数退化为指针,所以下面的内容永远输出为4。voidfun(chara1000)coutsizeof(a) fileName;memset头文件包含在string.h中。35、this指针存在于类的成员函数中,指向被调用函数所在的类实例的地址。this指针的使用:一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this-n = n (不能写成n = n)。36、派生类的对象可以被赋值给基类对象。派生类的对象可以初始化基类的引用。指向基类的指针也可以指向派生类。37、通过基类对象名、指针只能使用从基类继承的成员。表现在派生类的新增成员无法输出。38、多继承:派生类从多个基类派生。 多重派生:由一个基类派生出多个不同的派生类。多层派生:派生类又作为基类,继续派生新的类。39、C+不允许用户自己定义新的运算符,只能对已有的运算符进行重载。C+中绝大部分的运算符允许重载。 不能重载的运算符只有 5个:(成员访问运算符) .*(成员指针访问运算符) (域运算符) sizeof (长度运算符) ?:(条件运算符)40、由于类型限制,重载运算符不满足交换律。41、多继承时的构造函数:派生类名:派生类名(基类1形参,基类2形参,本类形参):基类名1(参数), 基类名2(参数), 本类成员初始化赋值语句;42、当派生类与基类中有相同成员时:若未强行指名,则通过派生类对象使用的是派生类中的同名成员。如要通过派生类对象访问基类中被覆盖的同名成员,应使用基类名限定。例:class D1: public B1, public B2;d1.B1:nV=2;/作用域分辨符标识, 访问基类B1成员43、int b=5,*a=&b;coutaendl;输出的是a的地址而char *a=123;coutaendl;输出的是a里面的字符串内容而不是a的地址。cout*aendl;/输出的是字符串首字母。原因是,指针指向数组首地址,而字符串实质上就是数组。44、Point &pt2=pt1; 定义了pt2为pt1的引用。通过这样的定义,pt1和pt2表示同一对象。引用必须在定义时马上被初始化。45、指针数组和数组指针的区别:#include using namespace std;void main()int a5=1,3,5,7,9; /define an arrayint (*pa)5=&a; / define array pointer and initializationcout*pa0=*pa0endl;cout*(pa0+1)=*(pa0+1)endl;char *p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论