C++注意事项

1.注意名字空间
(一般不建议将标准命名空间全部打开,而是需要用库里的什么就打开什么。这就有效的防止了命名冲突)
2.定义文件流之后,要用open打开
3.构造函数重载的歧义问题:
Eg.创建2个默认参数值的构造函数Date(Month m,int d=1,int y=2015)  因为该函数和带3个默认参数值的构造函数Date(int y=2015,int m=9,int d=1);在第一个参数类型相同,所以在建立1个参数的对象是无法相互区别:
Date(Jan);
Date(2015);邮箱
4.函数默认值自右向左依次定义,不能有间隔
函数初始化从左向右依次匹配,不能有间隔
初始化列表无限制
5.内敛函数和非内连函数
6.对象本体不等于对象试实体
对象实体=对象本体+外延
7.IE网页:代码段+数据段(全局变量)+栈(局部变量)+堆(申请的空间)(不随函数、对象的结束而撤销)
8.malloc不具备匹配构造函数的能力,无法进行对象的构造。
New有构造和析构能力,会匹配对象的构造函数
9.sizeof是运算符,不是函数--sizeof(int)
10.指针p指向一个对象
(*p).year<=>p->year
11.new申请空间形成一个整块,系统记录地址和大小
delete删除时删除一个整块,自动给大小
12.同一类的对象,在构造函数中放宽限制,可以直接访问私有
13.同一个类中,在底层中各个对象的相同成员函数都是同一个----可直接访问同一类中不同对象中的私有成员。*
14.复制构造函数为增强函数的适应性,参数应用const修饰
15.数组中 a[i]<=>*(a+i)
16.可以有类无对象,静态数据成员属于类(否则无法计数)(即当类定义,而对象未定义的时候,静态数据成员就存在),普通数据成员属于对象
17.静态数据态成员的赋值:Point::countp=0;        (countp为公有)
私有静态数据成员:静态成员函数(前+static)
18.栈--先构造的后析构
19.临时的对象--断言析构。
20.函数返回类型为类的引用,则返回的是一个隐式指针--对于对象不会进行临时的创建。
21.返回类型为对象--要进行对象的临时的创建
22.返回值优化
Stu f1(Stu& x)
{
        Stu z;
...
return  x;//不创建tmp,直接返回x的别名
}
23.结构体变量的赋值“=”---内存块的直接复制(两条指令完成所有操作)
24.运算符的重载--以函数实现
(1)重载为非静态的成员函数
<返回值类型>operator<运算符>(<形式参数列表>);
(2)重载为友元函数
friend<返回值类型>operator<运算符>(<形式参数列表>);
25.c1+c2 =>    c1.operator+(c2)//函数名--operator+
operator(c1,c2)
二者选其一 
26.自增
(1)前置
++a;//先自增后使用
(2)后置
a++;//先使用后自增
*后置自增加int符号作为区分,不做任何值传递*
27.头文件卫士(只出现在头文件之中)
#ifndef  ***//如果为定义此符号  
#define  ***//则定义此符号
```
```
```
#endif
28.默认参数值和inline只在声明里
29.函数的申明应该写在头文件之中,否则可能在多个cpp中定义,造成重定义。
30.类的定义写在头文件中,类的实现(非内联函数)写在cpp中。 
31.类的内联函数定义写在头文件中,不会出现重定义。
  原因:内联函数替换调用--编译时将内联函数替换成一段代码(内联函数的体)--没有函数调用,时间短--占用空间变大,效率降低。
内联函数不会造成多文件结构中的重定义现象。
32.引用传递所用时间小于对象传递
33.下标运算符[]的重载(只以成员函数重载)
a[i]=>a.operator[](i)
34.有无const是重载的,复制构造函数要加const(防止由常量传给非常量)
35.流插入运算符合流提取运算符只能重载为友元函数
operator<<(cout,a)
36.返回类型为引用时,返回的是对用对象的别名。
37.C++中,对类的与包含只用<>
38.不可以类作为形参,返回为引用---返回的别名无实体。
39.c2=c1+4--->operator+(c1,4)
将4转化为CComplex类型的对象--隐式转换
4-->CComplex(4)//要定义CComplex(double r);
*少用*
往往在一个参数的构造函数会偷偷进行转换,导致错误
(也只在一个参数的构造函数中才能转换)
**禁止进行隐式转换--explicit---explicit关键字只能用于类内部的构造函数声明上,而不能用在类外部的函数定义上---explicit写在单参数的构造函数之前
Eg.
explicit  CComplex(double r);
40.引用--起别名---没有构造过程--不匹配构造函数。
41.struct结构体默认访问控制为public
42.析构函数不可重载(只有一种情况)
43.默认(白送):赋值预算符(浅拷贝)、无参数的构造函数、复制构造函数(浅拷贝)、析构函数
44.复制构造函数--A(const  A&  x);//适应性更强
45.const 不可传给 非const//是否可读可写
46.构造函数的次序:匹配-->传递-->构造数据成员-->执行构造函数的函数体,完成初始化。
47.栈:先构造的后析构
48.类是同一类对象的抽象,对象是类的具体。
49.内存空间:全局数据区、栈(形参)、堆()
50.new  (1)匹配构造函数
(2)new是运算符
51.sizeof()是运算符
52.静态成员:1静态成员函数--只操作静态数据成员 
2静态数据成员--只属于类---只要类存在,静态数据成员就存在(静态数据成员先于对象产生)--放在全局数据区
53.构造参数的参数初始化列表与构造参数的定义放在一起**
54.传递类的对象的时候,可能涉及复制和析构

  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值