C++八股

基础编程

内存分区

  1. 代码区:存放函数的二进制代码,由操作系统进行管理
  2. 全局区:存放全局变量和静态变量以及常量
  3. 栈区:由编译器自动分配和释放,存放函数的参数值,局部变量等
  4. 堆区:由程序员分配和释放,若程序员不分配释放,则由操作系统回收

new操作符

在堆区开辟数据,返回时数据对应的类型指针,释放用delete。

引用

  1. 本质是一个指针常量,指向的内容不可改变
  2. 给变量起别名:数据类型 &别名 = 原名
  3. 引用在初始化后不可修改
  4. 引用可以作为函数调用的左值(可以返回一个局部变量)

函数占位参数

在定义函数时,形参可以使用int之类的数据类型占用一个位置

函数重载

  1. 可以提高代码的复用性
  2. 必须在同一个作用域下,函数名称相同,函数参数的返回类型、参数个数、参数顺序至少一个不同
  3. 改变函数的返回值不是重载

访问权限

  1. pubilc:全局访问
  2. protected:类内可访问,类外不可访问(父类中的protected内容,子类可以访问)
  3. private:类内可访问,类外不可访问(父类中的private内容,子类不可以访问)

构造函数与析构函数

构造函数:在创建对象时为对象的成员属性赋值,构造函数由编译器自动调用

如果用户定义了有参构造函数,C++将不在提供默认无参构造,但会提供默认拷贝构造

如果用户定义了拷贝构造函数,C++不会提供其它的构造函数

按参数分类

  1. 有参构造
  2. 无参构造

按类型分类

  1. 普通构造
  2. 拷贝构造(使用一个创建完毕的对象初始化一个新的对象,使用值传递的方式返回)

调用方式

  1. 括号法
  2. 显示法
  3. 隐式转换法

析构函数:在对象销毁前自动调用,执行清理工作

深拷贝与浅拷贝

浅拷贝:简单的赋值操作

深拷贝:在堆区重新申请内存空间,进行拷贝操作

初始化列表

构造函数():属性1(值1),属性2(值2)...()

可以加快属性的初始化

静态成员变量

  1. 不属于某个对象上,所有对象都共享同一份数据,类内生命、类外初始化(用::初始化),访问方式:通过对象进行访问(对象.成员)、通过类名进行访问(类名::成员)
  2. 类外访问不了私有成员变量

静态成员函数

  1. 所有对象共享一个函数
  2. 静态成员函数只能访问静态成员变量(无法区分非静态成员变量的归属)
  3. 类外访问不了私有静态成员函数

成员变量与成员函数时分开存储的

  1. 空对象占用的内存空间为1(编译器为了区分各个对象在内存中的占用位置),每个空对象应该有一个独一无二的内存地址。
  2. 非静态成员变量,属于类的对象上;静态成员变量不属于类的对象上;(非)静态成员函数,不属于类对象。

this指针

  1. 本质是指针常量,指针的指向是不允许修改的,指针指向的值是可以修改的 
  2. this指针指向被调用的成员函数所属的对象(哪个对象调用,this就指向哪个
  3. this无需定义,直接使用
  4. 用途:当形参和成员变量同名时,可以用this指针区分;在非静态成员函数中返回对象本身,可以用teturn *this(返回值要用引用的方式传递:类&,不会创建新的对象,如果直接返回类,会自动调用拷贝构造函数创建新的对象

空指针

空指针所创建的对象无法访问成员变量

常函数与常对象

  1. 在成员变量后加const,修饰的是this指向,则其指向的值不可修改
  2. 如果需要修改需要在定义前加入关键字mutable
  3. 常对象与常函数的特点基本一致

注意:常对象只能调用常函数

友元

目的是让一个函数或类访问另一个类中的私有成员

friend

全局函数做又元

在声明类的第一行做一个函数声明,函数前加一个关键字friend

类做又元

在声明类的第一行做一个类声明,类前加一个关键字friend

全局函数做又元

在声明类的第一行做一个全局函数声明,全局函数前加一个关键字friend

运算符重载

使用operator+

继承

 

 继承中父类和子类的构造和析构的顺序

 继承中同名成员处理方式

直接调用,访问的是子类成员,如果通过子类对象访问父类的成员,需要加父类作用域

 

 

 菱形继承

 当两个父类拥有相同的属性时,需要加以作用域区分

   

 多态

  如果想运行子类的方法,则需要在运行阶段才绑定地址,使用vitual关键字

动态多态的满足条件

  1. 有继承关系
  2. 子类重写父类的虚函数
  3. 使用父类的指针或引用,执行子类的对象

重写概念:函数返回类型、函数名、函数参数列表完全一致

多态的底层原理

虚函数的出现,将会导致类的内部发生改变,生成了一个虚函数表指针,其指向了虚函数的函数入口地址,当子类重写了虚函数的时候,子类中虚函数表 内部 会替换成 子类的虚函数地址

对文件的操作

  1. ofstream 写操作
  2. ifstream 读操作
  3. fstream 读写操作

  

 文件打开方式可以配合使用,利用 | 操作符

读文件

 二进制文件读写

写文件

读文件

 

 高级编程

模板-泛型编程

自动类型推导

function(参数)

显示指定类型

function<类型>(参数)

注意事项

 普通函数与函数模板的区别

 普通函数和函数模板的调用规则

 使用空模板的参数列表强制调用函数模板

function<>(参数)

模板的局限性

 当模板使用自定义的类名时,需要具体化模板

比如:template<> bool myCompare(Person &p1, Person &p2);

类模板

<>代表模板的参数列表、()代表形参

类模板与函数模板的区别

 

 

 类模板中成员函数的创建时机

 类模板对象做函数参数

 类模板与继承

 类模板成员函数的类外实现

 

 

 类模板的份文件编写

 类模板与友元

 STL(标准模板库)

 

 

 

 

 

 

 

 String容器

 

 

 

 

 

 

 

 vector容器

 

 

 

 

 

 

 

 deque容器

 

 

 

 

 

 

 

 

 stack容器

 

 queue容器

 

 

 list容器

 

 

 

 

 

 

 

 set容器

 

 

 

 

 

 

 

 

  仿函数

bool operator() ()

第一个()代表重载的符号、第二个()代表函数的参数列表

 map容器

 

 

 

 

 函数对象

 

 谓词

 内建函数对象

 

 

 

 STL中的常见算法

 

 

 

 

 

 

 

 

 

 常用排序算法

 

 

 

 常用的拷贝和替换算法

 

 

 

 

 

 常用的数据生成算法

 

 

 常用集合算法

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值