C/C++小知识总结之五

1(1)C++中#ifdef 和#endif的作用这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。

条件编译命令最常见的形式为: 

#ifdef 标识符 
程序段1 
#else 
程序段2 
#endif

它的作用是:当标识符已经被定义过(一般是用#define命令定义),则对程序段1进行编译,否则编译程序段2。 
其中#else部分也可以没有,即: 
#ifdef 
程序段1 
#denif

(2)如果两次#include   "aaa.h"(不见得是直接,也有可能两个不同的头文件中都包含了这个头文件)就会出错,因为相同的类不能定义两次。把aaa.h稍做修改:   

 #ifndef   _aaa_   
 #define  _aaa_   
  class   aaa   
  {   
  };   
  #endif   
  就可以避免这样的问题。因为当你已经包含过这个文件,_aaa_就会有了定义,那么#ifndef的条件为假,就不会再执行后面的类定义了。 

#ifdef和#endif必须成对使用,从理论上讲可以出现在任何地方(头文件和实现文件中),通常防止头文件被多次包含,在头文件中使用是必须的:

#ifndef <标识> 
#define <标识>

...... 

#endif

<标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h 

#ifndef _STDIO_H_ 
#define _STDIO_H_

......

#endif 


2、#pragma预处理指令:它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作。

#pragma  comment(...) 该指令将一个注释记录放入一个对象文件或可执行文件中。常用的lib关键字,可以帮我们连入一个库文件。如:#pragma  comment(lib, "comctl32.lib")、#pragma  comment(lib, "vfw32.lib")、#pragma  comment(lib, "wsock32.lib")等,

如#pragma comment(lib, "Winmm.lib"):这条指令和你在工程中添加"winmm.lib"的功能一样,告诉编译器要导入winmm库。

使用#pragma region和#pragma endregion关键字,来定义可以扩展和收缩的代码区域的开头和结尾。这样就可以把这些代码行收缩为一行,以后要查看其细节时,可以再次扩展它。


3、#include <MMSystem.h>:windows中与多媒体有关的大多数接口;

#include <Windows.h>:这个头文件 一般来说,这是用标准的API来写程序的方法。windows.h里定义了关于创建窗口,消息循环等函数,如果要用API来做有界面的程序的话,必须要用到这个头文件;

4、C++的三种访问权限与三种继承方式 - 思维与睿智 - 博客频道 - CSDN.NET
http://blog.csdn.net/luoweifu/article/details/46953343

(1)C++中的类,有三种访问权限(也称作访问控制),它们分别是public、protected、private。

访问权限 public protected private
对本类 可见 可见 可见
对子类 可见 可见 不可见
对外部(调用方) 可见 不可见 不可见

(2)C++中继承的方式还有多种,也分别都用public、protected、private表示。这与Java不一样,Java只有继承的概念,默认是public继承的。 
       a. 三种继承方式不影响子类对父类的访问权限,子类对父类只看父类的访问控制权;

       b. 继承方式是为了控制子类(也称派生类)的调用方(也叫用户)对父类(也称基类)的访问权限

       c. public、protected、private三种继承方式,相当于把父类的public访问权限在子类中变成了对应的权限。 如protected继承,把父类中的   public成员在本类中变成了protected的访问控制权限;private继承,把父类的public成员和protected成员在本类中变成了private访问控制权。


5、struct和typedef struct彻底明白了 - bingo~ - 博客园
http://www.cnblogs.com/qyaizs/articles/2039101.html


结构体定义typedef struct用法详解和用法小结_紫心玲儿_新浪博客
http://blog.sina.com.cn/s/blog_4fdabc820100fsxu.html


6、C++抽象类 - 可笑痴狂 - 博客园
http://www.cnblogs.com/dongsheng/p/3343939.html


7、虚函数和纯虚函数的作用与区别 - xwpc702的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/xwpc702/article/details/8670025


8、C++中的类模板详细讲述 - Out Man - 博客园
http://www.cnblogs.com/assemble8086/archive/2011/10/02/2198308.html

C++中模板Template的使用_小雨_新浪博客
http://blog.sina.com.cn/s/blog_74a271040100tkmj.html


9、C++友元函数和友元类 - 大气象 - 博客园
http://www.cnblogs.com/greatverve/archive/2012/11/22/cpp-friend.html


10、函数返回值是否使用引用类型的问题:理解引用、返回值 - 迂者-贺利坚的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/sxhelijian/article/details/7466540


11、C++基本功之Operator - chinazjf的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/chinazjf/article/details/3321309

C++ operator关键字(重载操作符) - 简单--生活 - 博客园
http://www.cnblogs.com/xiangxiaodong/archive/2012/02/12/2348144.html


12、指针:

C指针的精髓

http://wenku.baidu.com/view/9a685c10647d27284a73511e.html?re=view

对C的指针的理解
http://blog.csdn.net/mikayong/article/details/7515358

科学网—[转载]别人对C中指针的理解 (数组指针,指针数组,函数指针,指针函数
http://blog.sciencenet.cn/blog-441970-332256.html

C++指针详解

http://www.cnblogs.com/ggjucheng/archive/2011/12/13/2286391.html

C++中this指针用法详解

http://blog.chinaunix.net/uid-21411227-id-1826942.html


13、引用:

C++中的引用的用法和实例

http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html

深入分析C++引用
http://blog.csdn.net/webscaler/article/details/6577429
C++中引用的使用总结
http://www.jb51.net/article/42142.htm

14、指针与引用的区别
浅谈C++中指针和引用的区别
http://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004869.html

15、数组:
C++数组操作
http://www.cnblogs.com/kykuaileren/archive/2011/09/04/2166646.html
C++动态数组
http://www.cnblogs.com/lxshanye/archive/2013/05/20/3088558.html

16、return、break和continue的区别
如果需要跳出循环体或者选择结构时就要用到break,而continue语句仅仅是中止这次的循环,接着再进行下一次的循环。return则直接从函数中返回,返回到主调函数的下一行继续运行,原本return后面的语句都不再执行。

17、this指针
this指针的创建和删除由编译器来完成,程序猿不需要操心。
this变量记录每个对象的内存地址,然后通过间接访问运算符->访问该对象的成员。
this变量记录每个单独的对象的内存地址,而this指针则指向每个单独的对象。因此,不同的对象输出的this指针的变量的内存地址也不同。
this指针的作用会在重载运算符中得到演示。

PS:删除一个指针后,一定要将该指针设置为空指针。
         定义引用时一定要同时对该引用进行初始化, int a; int &ra = a;//不能写成int a; int &ra; ra = a;因为引用就像常量,只能初始化,不能赋值。

18、(1)常量指针
int *const p; //该指针不可改变(指针自身的值不可改变),而它指向的整数(目标)是可以改变的。定义常量指针时必须初始化。
int a = 3; int *const p = &a;  a =4;  分别输出两个a,3、4。//A *const p = new A;
(2)指向常量的指针
const int *p;//该指针指向的整数是不可修改的,但是该指针可以修改。//const A* p = new A;
(3)指向常量的常指针
const int * const p;// 都不能变。

19、A.函数的参数传递                                                                         
(1)通过值来传递函数参数:按值传递;
(2)通过指针来传递函数参数:按址传递;
(3)通过引用来传递函数参数:按别名传递;
还可以利用指针和引用来返回多值。

       B.传递对象
(1)用值来传递对象:按值传递对象;
(2)用指针来传递对象:按址传递对象
(3)用const指针传递对象;
(4)用引用来传递对象:按别名传递对象

PS:B.见范磊《零起点学通C++》P128及之后,注意看视频讲解。

20、我们构造带有const成员或者引用成员的对象时,由于const成员或者引用成员都是不可被赋值的,因此必须通过成员初始化列表进行。如:
class A
{
 public:
     A(int a, int b):num(a),total(b){}
private:
     const int num;
int &total;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值