VC++学习摘要

来源:互联网 发布:庄小威离婚知乎 编辑:程序博客网 时间:2024/05/27 02:26

由于VC++是基本的C++类的面向对象的程序设计开发平台,那就不得不初步学习掌握一下其基本的操作了。


1.类中成员的声明与使用的前后关系可以忽略。


2.友元函数:当一个函数是A类的友元,且还是类B的成员函数时,则这样的友元称为友元成员函数;若该函数不属于任何类的成员,则这样的友元称为友元外部函数。通常将友元外部函数简称为友元函数。


3.运算符重载:顾名思义,即对现有的运算符赋予新的定义,一般指利用常用的运算符号对函数进行运算。需要用OPERATER说明。一般格式如下:

<返回类型说明符> operator <运算符符号>(<参数表>){    <函数体>}

作为参数的&是表示引用,引用其实就是对象的别名,使用按引用传递参数可以提高效率。因为按值传递会生成临时变量。 作为返回值的&表示返回值是调用对象本身, 而没有返回值表示返回值要赋给一个新的变量



4.类型转换是将一种类型的值映射为另一种类型的值。其中转换函数是实现强制转换操作的手段之一。一般格式为:operator 类型名( )     {         实现转换的语句    }



5.句柄,是VC++中基于Windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是一个指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在I/O文件中,它是毫无用处的。 句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,VC++使用了大量的句柄来标识很多对象。



6.预编译文件类PCH问题。预编译头文件(一般扩展名为.pch),是把一个工程中较稳定的代码预先编译好放在一个文件(.pch)里.这些预先编译好的代码可以是任何的c/c++代码--甚至可以是inline函数,只是它们在整个工程中是较为稳定的,即在工程开发过程中不会经常被修改的代码.预编译头文件(一般扩展名为.pch),是把一个工程中较稳定的代码预先编译好放在一个文件(.pch)里.这些预先编译好的代码可以是任何的c/c++代码--甚至可以是inline函数,只是它们在整个工程中是较为稳定的,即在工程开发过程中不会经常被修改的代码.件,然后用这个头文件(.h)来生成一个预编译头文件(.pch)vc默认的头文件就是stdafx.h,因为头文件是不能编译的,所以我们还需要一个.cpp文件来作桥梁,vc默认的文件为stdafx.cpp,这个文件里只有一句代码就是:#include "stdafx.h".接下来要用它生成.pch文件,涉及到几个重要的预编译指令:/yu,/yc,/yx,/fp.简单地说,/yc是用来生成.pch文件的编译开关.在project->setting->c/c++的category里的precompiled header,然后在左边的树形视图中选择用来编译生成.pch文件的.cpp文件(默认即stdafx.cpp)你就可以看到/yc这个开关,它表示这个文件编译了以后是否生成.pch文件(可能/yc的c表示create)./fp指令指定生成的.pch文件的名字及路径(可能/fp的p代表path)./yu的u即use使用,工程中只要包括了.h文件的文件都会有这个/yu指令.如果选择自动automatic...的话则原来为/yc的地方就换成了/yx指令.如果选择自动,则每次编译时编译器会看以前有没有生成过.pch文件,有则不现生成否则就再次编译产生.pch文件.

注意: a,实际上,由appzard项目向导生成的默认的头文件及cpp文件stdafx.h和stdafx.cpp可以是任何名字的.原因很简单.但如果你要这样做就要记得修改相应的project->setting...下的几个预编译指(/yc,/yu,/yx,/fp)的参数.

b.在任何一个包括了将要预编译的头文件而使用了.pch文件的工程文件的开头,一定必须要是在最开头,你要包含那个指定生成.pch文件的.h文件(通过.cpp文件包括,默认为stdafx.cpp),如果没包括将产生我最开头产生的错误.如果不是在最开头包括将产生让你意想不到的莫名其妙错误,如若不信,盍为试之?

c.预编译文件.pch生成之很耗时间,而且生成之后它也很占磁盘空间,常在5-6m,注意项目完成之后及时清理无用的.pch文件以节约磁盘空间.

d.如果丢了或删了.pch文件而以后要再修改工程文件时,可将指定的/yc的.cpp文件(默认为stdafx.cpp)重新编译一次即可再次生成.pch文件,不用傻傻的按f7或rebuild all

     照这么说,我这种情况只要重新将“stdafx.cpp”编译一下就可以了,一试,马上能编译运行了。

这个错误是预编译文件的设置造成的,有几种可以尝试的途径:

1)单独编译StdAfx.cpp

2)编译所有(即按Ctrl+F7)

3)在工程-设置-c++-最下面的工程选项里去掉××。pch文件

4)在工程-设置-c++-在分类里选择预编译头文件,选择自动使用预补偿页眉,或者选择不使用预补偿头



7.回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
凡是由用户设计而却由windows系统调用的函数,统称为callback函数,这些函数都有一定的类型,以配合windows的调用操作。



8.C++中结构体与类的区别主要有,首先是声明符号不同,即STRCUT与CLASS的区别;其次是对于内部成员的访问控制不同,结构体默认为公有的,而类中默认为是私有的;最后,类中的成员变量定义时,是不能直接赋予初值的。


9.C++中的结构体作为对象是可以有行为的,即函数,而C中是只有成员变量的。


10.C中scanf与 printf必须指明数据类型,而C++中 cin>> 与cout<<endi则只需指明变量名即可,系统自动确认变量类型。C++是允许函数与运算符重载的。


11.构造函数的作用是对对象本身做初始化工作,也就是给用户提供初始化类中成员变量的一种方式。
如果一个类中没有定义任何的构造函数,那么C++编译器在某些情况下会为该类提供一个不带参数的默认的构造函数。只要一个类中定义了一个构造函数,不管这个构造函数是否是带参数的构造函数,C++编译器就不再提供默认的构造函数。但可以自己定义不同的构造函数(注意继承时的一致性)。
如果一个类中没有定义构造函数,则编译器只有在以下三种情况下提供默认的构造函数:
1>如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时。
2>如果类的基类有构造函数(可以是自定义的,也可以是编译器提供的默认构造函数)。
3>在类中的所有非静态的对象数据成员,他们所属的类中有构造函数(可以是用户定义的,也可以是默认的)。


12.C++中基类和派生类遵循类型兼容原则:即可用派生类的对象去初始化基类的对象,可用派生类的对象去初始化基类的引用,可用派生类对象的地址去初始化基类对象指针。
C++中动态绑定条件发生需要满足2个条件:1>只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数,非虚函数不能进行动态绑定.2>必须通过基类类型的引用或指针进行函数调用.



13.覆盖的是指子类函数覆盖基类函数
在不同的类内(分别位于子类和父类)。
同名同参。
基类的函数名前必须有virtual关键字。

隐藏指派生类的函数隐藏了基类的同名函数
如果派生类函数与基类函数同名,但参数不同,无论基类函数前是否有virtual修饰,基类函数被隐.
如果派生类函数与基类函数同名,参数也相同,但是基类函数前无virtual修饰,基类函数被隐藏。



14.C++中引用头文件时,<>表是从系统目录下开始搜索,然后是PATH目录,不搜索当前目录;' '表示从当前目录开始搜索,然后是系统目录与PATH目录。


15.程序设计语言的预处理的概念:在编译之前进行的处理。 C语言的预处理主要有三个方面的内容: 1>.宏定义; 2>.文件包含; 3>.条件编译。 预处理命令以符号“#”开头。

有些语句希望在条件满足时才编译。
格式:(1)
#ifdef 标识符
程序段1
#else
程序段2
#endif

#ifdef
程序段1
#endif
当标识符已经定义时,程序段1才参加编译。

格式:(2)
#ifndef 标识符
#define 标识1
程序段1
#endif
如果标识符没有被定义,则重定义标识1,且执行程序段1。

格式:(3)
#if 表达式1
程序段1
#elif 表达式2
程序段2
……
#elif 表达式n
程序段n
#else
程序段n+1
#endif
当表达式1成立时,编译程序段1,当不成立时,编译程序段2。
使用条件编译可以使目标程序变小,运行时间变短。


16.可执行程序EX10.exe的产生,经过了两个步骤:
首先,C++编译器对工程中的三个源文件EX10.cpp、fish.cpp、animal.cpp单独进行编译(Compiling…)。
在编译时,先由预处理器对预处理指令(#include、#define和#if)进行处理,在内存中输出翻译单元(一种临时文件)。
编译器接受预处理的输出,将源代码转换成包含机器语言指令的三个目标文件(扩展名为obj的文件):EX10.obj、fish.obj、animal.obj。
注意,在编译过程中,头文件不参与编译;在EX10工程的Debug目录下,我们可以看到编译生成的obj文件。

接下来是链接过程(Linking…),链接器将目标文件和你所用到的C++类库文件一起链接生成EX10.exe。



0 0
原创粉丝点击