1.Qt creator 学习笔记

1.C++输入输出表达

1.cin 输入
2.cout 输出

2.C++面向对象

2.1类和对象

C++ 在 C 语言的基础上增加了面向对象编程, C++ 支持面向对象程序设计。类是 C++
的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用
于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。
打个比方说明一下什么是类,比如有一条小狗,小狗有名字叫旺财,旺财的年龄是 2 岁,
同时旺财会汪汪的叫,也能跑。 我们统称狗这个为类,类是我们抽象出来的,因为狗不只有上
面的属性,还有体重,毛发的颜色等等,我们只抽象出几种属性成一个类。 具体到哪条狗就叫
对象。
从类中实例化对象分两种方法,一种是从栈中实例化对象,一种是从堆中实例化对象
(资料来自正点原子)

2.2继承

面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,
这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率
的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了
一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。在 Qt 里大量的使用
了这种特性, 当 Qt 里的类不满足自己的要求时,我们可以重写这个类,就是通过继承需要重写
的类,来实现自己的类的功能。

2.3.重载

2.3.1函数重载

在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指
参数的个数、类型或者顺序)必须不同。我们不能仅通过返回类型的不同来重载函数。 在 Qt
源码里,运用了大量的函数重载,所以我们是有必要学习一下什么是函数重载。 不仅在 C++,
在其他语言的里,都能看见函数重载。 因为需要不同,所以有重载各种各样的函数。
下面通过一个小实例来简单说明一下函数重载的用法。 我们还是以狗类为说明, 现在假设
有个需求。 我们需要打印狗的体重, 分别以整数记录旺财的体重和小数记录旺财的体重, 同时
以整数打印和小数打印旺财的体重。 那么我们可以通过函数重载的方法实现这个简单的功能。

2.3.2 运算符重载

运算符重载的实质就是函数重载或函数多态。运算符重载是一种形式的 C++多态。目的在
于让人能够用同名的函数来完成不同的基本操作。要重载运算符,需要使用被称为运算符函数
的特殊函数形式,运算符函数形式: operatorp(argument-list), operator 后面的’p’为要重载的运
算符符号。 重载运算符的格式如下:

2.4多态

C++多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数;
形成多态必须具备三个条件:
1. 必须存在继承关系;
2. 继承关系必须有同名虚函数
(其中虚函数是在基类中使用关键字 virtual 声明的函数,在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数);
3. 存在基类类型的指针或者引用,通过该指针或引用调用虚函数
这里我们还需要理解两个概念:
虚函数:
是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,
会告诉编译器不要静态链接到该函数。我们想要的是在程序中任意点可以根据所调用的对象类
型来选择调用的函数,这种操作被称为动态链接,或后期绑定。 虚函数声明如下: virtual
ReturnType FunctionName(Parameter) 虚函数必须实现,如果不实现,编译器将报错
纯虚函数:
若在基类中定义虚函数,以便在派生类中重新定义该函数更好地适用于对象,但是您在基
类中又不能对虚函数给出有意义的实现,这个时候就会用到纯虚函数。 纯虚函数声明如下:
virtual void funtion1()=0; 纯虚函数一定没有定义,纯虚函数用来规范派生类的行为,即接口。
包含纯虚函数的类是抽象类,抽象类不能定义实例,但可以声明指向实现该抽象类的具体类的
指针或引用。
上面那些概念大家可以捋一捋, 毕竟 C++概念还是挺多的。 为什么说到多态要与虚函数和
纯虚函数扯上关系? 光说概念没有实例确实难理解。下面我们还是以我们熟悉的狗类和动物类,
另外加一个猫类进行多态的讲解

2.5数据封装

封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受
到外界的干扰和误用,从而确保了安全。数据封装引申出了另一个重要的 OOP 概念,即数据
隐藏。
数据封装是一种把数据和操作数据的函数捆绑在一起的机制, 数据抽象是一种仅向用户暴
露接口而把具体的实现细节隐藏起来的机制, C++ 通过创建类来支持封装和数据隐藏(public、
protected、 private)。
其实我们在第 2.2 小节开始就已经接触了数据封装。 在 C++程序中,任何带有公有和私有
成员的类都可以作为数据封装和数据抽象的实例。 通常情况下,我们都会设置类成员状态为私
有(private),除非我们真的需要将其暴露,这样才能保证良好的封装性。这通常应用于数据成
员,但它同样适用于所有成员,包括虚函数。
下面我们还是以狗类为例, 增加一个食物的方法 addFood(int number)。将获得食物的方法
设定在 public 下,这样 addFood(int number)方法就暴露出来了,也就是对外的接口。然后我们
设置狗类的私有成员(private)食物的份数 total。 我们在这个教程里第一次使用 private, 在这章节
里我们也可以学到什么时候该使用 private 什么时候使用 public。 total 为获得的食物总数,然后
我们还写一个公开的方法 getFood()在 public 下,通过 getFood()来打印出小狗总共获得了几份食
物。

2.6 数据抽象

数据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息
而不呈现细节。数据抽象是一种依赖于接口和实现分离的编程(设计)技术。
数据抽象的好处:

  1. 类的内部受到保护,不会因无意的用户级错误导致对象状态受损。
  2. 类实现可能随着时间的推移而发生变化,以便应对不断变化的需求,或者应对那些要
    求不改变用户级代码的错误报告。
    举个简单的例子,比如我们生活中的手机。 手机可以拍照、听音乐、 收音等等。 这些都是
    手机上的功能,用户可以直接使用。 但是拍照的功能是如何实现的,是怎么通过摄像头取像然
    后怎么在屏幕上显示的过程,作为用户是不需要知道的。 也就是暴露的不用太彻底,用户也不
    必须知道这种功能是如何实现的,只需要知道如何拍照即可。
    就 C++ 编程而言, C++ 类为数据抽象提供了可能。它们向外界提供了大量用于操作对象
    数据的公共方法,也就是说,外界实际上并不清楚类的内部实现。
    其实像 cout 这个对象就是一个公共的接口,我们不必要知道 cout 是如何在屏幕上显示内容
    的。 cout 已经在底层实现好了。
    在上一节我们已经学习过数据封装, 数据封装是一种把数据和操作数据的函数捆绑在一起
    的机制, 而数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。

2.7数据(抽象类)

据抽象是指,只向外界提供关键信息,并隐藏其后台的实现细节,即只表现必要的信息
而不呈现细节。数据抽象是一种依赖于接口和实现分离的编程(设计)技术。
数据抽象的好处:

  1. 类的内部受到保护,不会因无意的用户级错误导致对象状态受损。
  2. 类实现可能随着时间的推移而发生变化,以便应对不断变化的需求,或者应对那些要
    求不改变用户级代码的错误报告。
    举个简单的例子,比如我们生活中的手机。 手机可以拍照、听音乐、 收音等等。 这些都是
    手机上的功能,用户可以直接使用。 但是拍照的功能是如何实现的,是怎么通过摄像头取像然
    后怎么在屏幕上显示的过程,作为用户是不需要知道的。 也就是暴露的不用太彻底,用户也不
    必须知道这种功能是如何实现的,只需要知道如何拍照即可。
    就 C++ 编程而言, C++ 类为数据抽象提供了可能。它们向外界提供了大量用于操作对象
    数据的公共方法,也就是说,外界实际上并不清楚类的内部实现。
    其实像 cout 这个对象就是一个公共的接口,我们不必要知道 cout 是如何在屏幕上显示内容
    的。 cout 已经在底层实现好了。
    在上一节我们已经学习过数据封装, 数据封装是一种把数据和操作数据的函数捆绑在一起
    的机制, 而数据抽象是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制
    C++ 程序中,任何带有公有和私有成员的类都可以作为数据抽象的实例。例子略,例子可

2.8接口(抽象类)

接口描述了类的行为和功能,而不需要完成类的特定实现。 C++ 接口是使用抽象类来实现
的,抽象类与数据抽象互不混淆,数据抽象是一个把实现细节与相关的数据分离开的概念。 如
果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。纯虚函数是通过在声明中使
用 “= 0” 来指定的。
设计抽象类(通常称为 ABC)的目的,是为了给其他类提供一个可以继承的适当的基类。
抽象类不能被用于实例化对象,它只能作为接口使用。如果试图实例化一个抽象类的对象,会
导致编译错误。
因此,如果一个 ABC 的子类需要被实例化,则必须实现每个虚函数,这也意味着 C++ 支
持使用 ABC 声明接口。如果没有在派生类中重写纯虚函数,就尝试实例化该类的对象,会导
致编译错误。可用于实例化对象的类被称为具体类。
根据概念我们来写个实例来说明抽象类。
还是以狗类为说明,例程与 2.2.4 小节类似,只是 Aninmal 类的 run()方法定义为纯虚函数,
纯虚函数不用实现,由派生类 Dog 和 Cat 类实现重写即可。
以上资料来自正点原子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值