1.带参数的main()函数,即main(int argc,charargv[]),argc是不需要输入的,编译器自动推测,argv是输入char,输入几个char第一个参数的值就是多少再加1。注意:默认数组里第0个元素是程序全名。
2.char型本身是字符型,比如‘a’等等,char才是字符串,字符串本身是地址,直到 \0 就结束。
3.对于带指针的类。拷贝构造和拷贝复制都需要,拷贝构造其实就是重载构造函数,拷贝复制就是重载=运算符。析构也要写。
4.static指类独有的,不要this指针就可访问。
5.iterator class可以有迭代器的功能,需要自己打造,重载+ ++ = * 等运算符。
6.friend 其实就是想访问类中的private成员,写一个return函数也可以达到要求。
7.函数对象又叫仿函数,实际是个类,对()重载了,优点是带状态,可以拥有不同状态。
8.typedef 只是对已有的类型别名定义,不产生新的类型。#define只是在预处理的时候对代码简单替换。两者并没有什么联系。
typedef int arr[3]; //arr的类型是int[3]
arr a; //typedef只有一块也行呀,不一定非要有两块。
9.派生类构造:先基类构造,再派生类构造,析构相反。
10.protected的成员可以被派生类直接访问
11.凡是基类有一个或者多个虚函数,析构函数应该声明为虚函数(不建议是纯虚函数),不然会调用基类的析构。非虚函数在编译时就解析。
12.(重要)在C++中,唯有用基类的pointer和reference才能支持面向对象编程概念。Essentisl c++p163
13.stl容器中list自带sort()
14,泛型编程:将数据和方法分开
15.模板:函数模板,类模板,成员模板
16.静态数据成员可以被非静态成员函数访问。但静态成员函数只能访问静态数据成员。
17.对于数组,数组地址就是首个元素的地址,但是vector不一样!!
18.inline解决什么问题:频繁调用同一个函数消耗栈空间。虚函数,while,switch是无法内联的,虚函数是在运行时才能确定,和内联相反。类中定义的成员函数的缺省值是内联,声明的需要自己在类外加inline,就是给编译器一个建议让他成为内联。内联是以代码复制为代价省去代码调用
19.lambda注意点:传参还是传引用;const还是mutable;返回值类型可以不加(编译器能判断出来)
C/C++基础知识(随时更新)
最新推荐文章于 2024-07-27 21:00:15 发布