C++学习笔记

**经过差不多一学期的学习,总结了一些C++的笔记现在分享一下,都是平时学习过程中遇到的困难,希望能对他人有所帮助吧,如果发现错误的地方可以留言,我尽可能修改**

1.C++相比C语言多出的东西
(1)定义了一个新的数据类型,布尔类型(Bool)
(2)新的变量赋值方式
C语言:int i = 2;
C++ : int i = 2 或者 int i(2);
(3)随用随定义
**2.**类和命名空间的区别
一般程序的开发都是有多个人共同开发的,为了防止不同模块的类和函数重名,所以采用命名空间来区分,这样就不怕同名的混乱了。
类就是面向对象所特有的,通过类来创建把自然界的事物封装起来来使用。类似于:命名空间是水果(集合),而类是苹果、香蕉等等(子集)。
3.函数参数默认值
有默认值的参数必须在参数列表的最右端
**4.**函数重载
在相同作用域之内,同一函数名定义的多个函数,参数个数和参数类型不同,叫做函数重载。
重载指的是函数具有的不同的参数列表,而函数名相同的函数。重载要求参数列表必须不同,比如参数的类型不同、参数的个数不同、参数的顺序不同。如果仅仅是函数的返回值不同是没办法重载的,因为重载要求参数列表必须不同。(发生在同一个类里)
覆盖是存在类中,子类重写从基类继承过来的函数。被重写的函数不能是static的。必须是virtual的。但是函数名、返回值、参数列表都必须和基类相同(发生在基类和子类)
重定义也叫做隐藏,子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。(发生在基类和子类)

**5.**拷贝构造函数
(1)如果没有自定义的拷贝构造函数,则系统自动生成一个默认的拷贝构造函数
(2)当采用直接初始化或复制初始化实例化对象是,系统自动调用拷贝构造函数
6. 构造函数总结
构造函数
**7.**析构函数
如果没有定义的析构函数则系统会自动生成
析构函数在对象销毁时自动调用
析构函数没有返回值,没有参数也不能重载
8. h文件里面不要去 定义函数,应该只进行声明,否则多个.cpp文件包含时,会发生重复定义错误
**9.**初始化列表在构造函数之前运行
10使用string类的时候,必须包含头文件string以及using namespace std。
11.this指针属于对象,初始化列表在构造函数之前执行,在对象还没有构造完成前,使用this指针,编译器无法识别。
12.类中成员函数的形参最好写成 new+成员变量 的形式,防止形参结合时的代码引起混淆
13.二维数组的初始化问题:
1.如果不做任何初始化,局部作用域的非静态数组中会存在垃圾数据,static数组中的数据默认初始化为0
2.如果只对部分元素初始化,剩下的未显式初始化的元素,将自动被初始化为0
14.友元:
对一些类外的函数,其他的类,给于授权,使之可以访问类的私有成员
15.标识符的可见性:
1.如果某个标识符在外层中声明,且在内层中没有同一个标识符的声明,则该标识符在内层可见
2.对于两个嵌套的声明,如果在内层作用域声明了与外层作用域同名的标识符,则外层作用域的标识符在内层不可见
16.静态生存期static:
1.这种生存期与程序的运行期相同
2.在文件作用域中声明的对象,具有这种生存期
3.在函数内部声明静态生存期对象,要冠以关键字static

用static来声明一个变量的作用有二:

(1)对于局部变量用static声明,则是为该变量分配的空间在整个程序的执行期内都始终存在。

(2)外部变量用static来声明,则该变量的作用只限于本文件模块。

17.静态数据成员static:
1.用关键字static声明
2.为该类的所有对象共享,静态数据成员具有静态生存期
3.必须单独地在类外定义和初始化,用(::) 来指明所属的类,且不能再类的构造函数的初始化列表中进行初始化
4.可以通过 类名::静态成员 来访问静态数据成员(初始化时用到),也可以通过 静态成员函数来访问
5.静态数据成员的值在const成员函数中可以被合法的改变。
6.静态成员函数不可以调用类的非静态成员,因为静态成员函数不含this指针,即静态成员函数不知道调用的是哪个对象的非静态成员
6.1博客园解释:
在c++中,静态数据成员可以被非静态成员函数调用吗?如果可以调用的话那为什么还要定义静态成员函数呢
静态数据成员可以被非静态成员函数访问。但静态成员函数只能访问静态数据成员。(存在争议)静态数据成员从属于某一个类,而不是某一个类的
对象。同理,静态成员函数也是一样。
追问
定义静态成员函数的作用有何在呢
回答
静态成员函数隶属于类,不用实例化对象,就可以直接调用静态成员函数来操作静态数据成员
提问者评价
太给力了,你的回答完美解决了我的问题!
7.引用CSDN的理解:
我们知道C++类的静态成员变量是需要初始化的,但为什么要初始化呢。其实这句话“静态成员变量是需要初始化的”是有一定问题的,
应该说“静态成员变量需要定义”才是准确的,而不是初始化。两者的区别在于:初始化是赋一个初始值,而定义是分配内存。
静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存。
8.正确的做法是将静态数据成员的初始化放在对应的.cpp文件中。
18.类的友元friend:
友元是C++提供的一种破坏数据封装和数据隐藏的机制。
通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息。
可以使用友元函数和友元类。
为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元。
类的友元关系是单向的,如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,
但A类的成员函数却不能访问B类的私有、保护数据。
友元函数:
友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中能够通过对象名访问 private 和 protected成员
作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择。
访问对象中的成员必须通过对象名。
19.初始化列表

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值