c++总结(1)

发布于:2022-12-20 ⋅ 阅读:(355) ⋅ 点赞:(0)
  1. c++是c的增强版,是几乎完全兼容C的
  2. C++在c的基础上增加了很多新的内容
  3. 编程思想发生了转变,c面向过程,c++是面向过程+面向对象

  1. 命名空间

为了解决命名冲突的问题

定义:

Namespace 命名空间名

{

变量名;

函数名;

类型名;

....

};

访问方式:

  1. 命名空间名::变量名
  2. Using namespace 命名空间名;

“::”是作用域运算符

引用

目的:

  1. 弱化指针,原本需要指针的地方现在用引用也可以达到相同的作用,更方便
  2. 减少临时空间的产生

引用:其实就是变量的别名

定义:数据类型 &引用名=变量名;

Int a=10;

Int &b=a;

Ps:

  1. 访问引用就是在访问变量
  2. 引用不会开辟空间
  3. 引用必须被初始化

Const:只读 修饰的引用:

  1. 防止实参被修改
  2. 可以是常量的别名

Const int &a=100;

相当于#define a 100

函数重载:功能类似,函数名相同,参数不同,与返回值无关,这样的函数就互为重载

函数重载的原理:

g++在编译的时候会对函数名结合参数和个数进行重命名,所以在函数调用时是按照重命名之后的函数名进行调用的

默认参数:

函数在声明时形参可以有默认值,如果函数在调用时传参了就使用传进来的值,否则就使用默认值,注意:默认值必须依次从右向左

C++如何调用c库的函数

如果是g++就打印g++,如果是gcc就打印gcc?

  1. g++中定义了_cplusplus这个宏,而gcc没有
  2. Sizeof(字符常量)的结果不一样

g++(1)  gcc(4)

extern “C”  :告诉g++,以下函数是外部的c库的函数,不需要重命名

类和对象

回忆结构体的作用:描述一类事物的属性的自定义的数据类型

笔试题:c的结构体和c++的结构体的区别?

  1. c 的结构体中不能有函数,但c++可以
  2. c中空结构体内存大小为0,但c++为1

类:描述一类事物的属性和行为的自定义的数据类型

C++中结构体和类的区别?

结构体的默认访问限定符是public ,而类是private

访问限定符:

Public修饰的成员既可以在类内被访问,也可以在类外被访问

private和protected修饰的成员只能在类内被访问

定义数据类型不会分配空间,是抽象的,对象是具体的实体(定义变量会分配空间)

所以:用类的数据类型定义变量的过程叫实例化对象

封装

C++三大特性:封装,继承,多态

考点:你对封装怎么理解?

封装就是把一类事物的属性和行为这种自定义的数据类型包起来,把需要隐藏的隐藏起来,把可以暴露的暴露出来,这就叫封装

This指针

谁正在调用成员函数,谁就是当前类对象

Public:成员在类外和类内都可以被访问

类内:在成员函数中可以直接被访问

类外:必须要先有对象,然后通过对象进行访问

不管在类外还是类内,访问成员必须要有对象,通过对象.成员或者指针->成员的方式进行访问

  1. 构造函数和析构函数

构造函数:给成员变量初始化的

谁调用:系统自动调用

实例化对象时调用

构造函数的定义:

  1. 函数名和类型相同
  2. 无返回值
  3. 参数不限制(构造函数可以有多个,可以重载)

深拷贝和浅拷贝

拷贝构造函数的参数必须是对象的引用

什么时候需要自己定义拷贝构造函数?

构造函数中有New

static修饰成员变量:

  1. 必须在类内声明在类外定义

原因:static修饰的变量在编译阶段就会开辟空间,而类在编译解决没有空间,成员变量又是类的一部分,有矛盾,而声明不分配空间,定义才分配空间

  1. 先于对象而存在,一个类只有一份,所有对象共享,不占某个对象的内存空间大小
  2. 在类外可以直接通过类名加作用域的方式进行访问

Const:只读

Const修饰的成员变量,不能作为左值,只能使用初始化列表的方式进行初始化

初始化列表的顺序不能决定初始化的顺序

初始化的顺序只与声明顺序有关

所以顺序依旧是a,b

const修饰的成员函数:

  1. const修饰的成员函数中不能修改任何成员变量的值
  2. Const看似在修饰成员函数,实则是在修饰这个成员函数的第一个形参this
  3. 不能修改成员变量的值

Mutable:

打破了封装

私有的或者受保护的成员只能在类内被访问不能在类外被访问,如果确实是需要访问私有的成员,就需要留公有的接口来访问。

本文含有隐藏内容,请 开通VIP 后查看