C++重点、难点知识(一)

学习方法-3W法

首先给大家传输一种学习知识的方法,我感觉学习任何东西都可以使用这种方法,万变不离其宗嘛。学习三部曲——3W法,也就是What,How,Why,下面是我看到的以及我的一些个人理解,详细可点击学习,思维三部曲

  • What: 当我们刚刚接触一个新事物的时候,这还处于一个认知过程,首先要问What is it?也就是搞清楚你要学习的这个东西,**它是什么?**也就是搞清楚它的定义。
  • How: 所谓的“HOW”,就是搞清楚它有什么作用?我们了解了它又是怎么使用它,也就是how to do?也就是了解它的使用方法或设计目的。
  • Why: 所谓的“WHY”,就是搞清楚某个东西为什么设计成这样?这样设计又有什么好处?为什么不是另外的样子?

1.函数重载

  • 定义:函数名相同,参数列表不同(参数类型不同或者参数个数不同或者参数顺序不同)。函数的返回类型可以相同也可以不相同。
  • 目的:是提高代码复用性。
void swap();//无参数
void swap(int a);//有参数
void swap(int a,int b);//参数个数不同

2.封装

定义:把数据和操作数据的函数绑定在一起,并支持权限控制(public,private,protected)。隐藏对象的属性和实现细节,对外提供公共访问接口。

  • C++认为万事万物皆为对象,对象上有其属性行为。(类中的属性和行为分别被称为成员变量,成员函数)
  • 具有相同性质的对象,可以称之为。人有人类,但具体对象可以是学生,工人,司机等。车有车类,但具体对象可以是红旗,长城,广汽传祺等。
  • 实例化:通过一个类,创建对象的一个过程。
    class People student;//People是类名,实例化一个具体对象学生student

3.构造函数和析构函数

作用:编译期自动调用,完成对象初始化和清理工作
构造函数语法:
类名(){ //初始化操作
1.没有返回值,不用写void
2.函数名与类名相同
3.可以有参数,可以发生重载
4.创建对象时,构造函数会自动调用,且只调用一次
}

析构函数语法:~类名(){ //进行清理操作
1.没有返回值,不用写void
2.函数名与类名相同,前面加~
3.不可以有参数,不可以发生重载
4.销毁前析构函数会自动调用,且只调用一次
如有在堆区开辟内存,则需在析构函数中做释放操作
}

4.拷贝构造函数

定义:拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的参数是本类型的一个引用变量。
作用:复制对象的,在使用这个对象的实例来初始化这个对象的一个新的实例。
语法:
类名(const 类名 & 对象名){

}
例如:person(const person &p){
//将传入人身上的所有属性都拷贝到我身上
}

  • 浅拷贝:由编译器提供的简单赋值拷贝操作。
  • 深拷贝:在堆区重新申请空间,进行拷贝。自己构造拷贝函数,解决浅拷贝带来的堆区内存的重复释放问题,当数据成员中有指针时,必须要用深拷贝

5.继承

定义:一个对象直接使用另一个对象的属性和方法。继承是多态的前提。
作用:提高代码复用。
基本语法语法:class 子类(派生类):继承方式 父类(基类)

  • 继承方式有三种:分别是公共继承(public),保护继承(protected),私有继承(private)。无论是哪种继承,父类中的私有成员都不可以被访问。
    当子类继承父类后,当创建对象时,也会调用父类的构造函数。先是调用父类构造函数再是调用子类,析构函数则相反。
  • 多继承:class 子类(派生类):继承方式 父类1(基类),继承方式 父类2(基类)…
    多继承可能会引发父类出现同名成员,需要加作用域来区分(父类名::)。
    C++实际开发中不建议使用多继承。

6.多态

定义:可以简单地说成“一种接口,多种实现”。多态可以简单地理解为同一条函数调用语句,能调用不同的函数;或者说,对不同对象发送同一消息,使得不同对象有各自不同的行为。 多态是建立在继承和虚函数之上。
多态分为两类:
静态多态:运算符重载,函数重载属于静态多态。
动态多态:派生类和虚函数实现运行时多态。
区别
静态多态函数地址早绑定,函数地址在编译阶段确定。
动态多态函数地址晚绑定,函数地址在运行阶段确定。
动态多态的满足条件:
1.有继承关系
2.子类重写父类中的虚函数
重写:函数返回类型, 函数名,参数列表完全相同)
动态多态使用:父类的指针或引用,指向子类对象。 (Animal *animal = new Cat;//创建在堆区,要用delete释放–delete animal)
多态的优点:

  • 1.组织结构清晰。
  • 2.可读性强。
  • 3.易于后期开发和维护。(实际开发中执行开闭原则,即对扩展进行开放,对修改进行关闭)

7.虚函数和抽象类

定义:是一种在基类定义为virtual的函数,并在一个或多个派生类中再定义的函数。
作用:只要定义一个基类的指针,就可以指向派生类的对象。虚函数是实现多态的基础,当我们通过基类的指针是析构子类对象时候,如果不定义成虚函数,那只调用基类的析构函数,子类的析构函数将不会被调用。如果定义为虚函数,则子类父类的析构函数都会被调用。
虚函数语法:virtual 返回值类型 函数名(参数列表){ }
纯虚函数语法:virtual 返回值类型 函数名(参数列表)= 0;
当类中有了纯虚函数,这个类便称为抽象类
抽象类特点:

  • 1.无法实例化对象。
  • 2.抽象类的子类必须重写纯虚函数,不然也属于抽象类,无法实例化对象。(virtual 返回值类型 函数名(参数列表){ })

8.虚析构与纯虚析构

多态使用时,如果子类属性有开辟堆区空间,那么父类指针在释放时无法调用子类的析构函数。解决方法:将父类中析构函数改为虚析构或纯虚析构。
共同作用:
1.可以解决父类指针释放子类对象(释放不干净,会造成内存泄露)。
2.都需要具体的函数实现

区别:拥有纯虚析构函数的类是抽象类,无法实例化对象。
虚析构语法:virtual ~类名(){ }
纯虚析构语法:virtual ~类名 ()= 0;
实现:类名::~类名(){ }
PS:第一次在CSDN上写,是个好的开始,哈哈。还有很多知识点,以后慢慢写吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值