一.C++入门
1. c++课程重要性
1. c++是面向对象的编程语言,面向对象是目前主流的开发思想
2. C++是后续QT的基础,QT是嵌入式领域图形开发框架
3. C++和QT相对独立,弯道超车的机会
4. C++和QT是一个就业方向
2. C++发展
1983年,贝尔实验室(Bell Labs)的Bjarne Stroustrup发明了C++。 C++在C语言的基础上进行了扩充和完善,是一种面向对象程序设计(OOP)语言。
C++的源文件扩展名是cpp
Stroustrup说:“这个名字象征着源自于C语言变化的自然演进”。还处于发展完善阶段时被称为“new C”,之后被称为“C with Class”。C++被视为C语言的上层结构,1983年Rick Mascitti建议使用C++这个名字,就是源于C语言中的“++”操作符(变量自增)。而且在共同的命名约定中,使用“+”以表示增强的程序。
常用于系统开发,引擎开发、嵌入式开发等应用领域, 至今仍然是最受广大程序员喜爱的编程语言之一。
C++在嵌入式中可以用于:
系统开发、算法开发、图形用户界面(GUI)开发。
3. C++的特点
1. C语言基础上,全面支持面向对象开发
2. 功能强大,应用领域广泛
3. 为数不多支持底层开发的面向对象语言
4. 在面向对象语言中,C++运行效率比较高
4. C++学习方法
1.C++知识点概念内容比较多,反复复习。
2.课程偏理论,有的内容不理解,可以先背下来,后续课程可能会理解更深
3.学好编程要多练习,简单的也要手写确认一遍,记笔记。
4.不懂的地方,有想自己测试的地方:做好标记,最重要的是继续,不要立刻查书、反复看代码。会错过后续内容,越来越听不懂;
5. 学习过程中不可能每个知识点都100%懂,有些内容可能经过多年的程序开发实践才领悟,所以即使有不懂的,也按进度计划前行
5. c和c++区别
做饭 洗衣服 扫地
c语言处理事情的逻辑:
1. 自己做饭
2. 自己洗衣服
3. 自己扫地
把事情事情分条目,一步步来做,这样是能够把握细节,符合计算机的思维,特点是运行效率高,开发效率低
C++语言处理事情的逻辑:找个对象让TA来做。
调用不同的对象来处理不同的事物,符合人的思维,特点运行效率低,开发效率高。
C语言的方式怎么来做,C++考虑的是找谁来做
6.软件安装
按照流程一直下一步,需要注意按照路径不能有中文。按照完成找到下方内容打开
6.1更改编码
重启就可以了,不用再看是否编码改成GBK
6.2 创建新项目
下一步完成
6.3 运行
点击下方图标运行 或者是Ctrl + R
6.4 添加c++11支持
QMAKE_CXXFLAGS+=-std=c++11
第一个程序
代码对齐快捷方式 ctrl + i
#include <iostream> //输入和输出的头文件 using namespace std; //使用标准的命名空间 int main() { cout << "你好" << endl; //cout输出 endl:end line 换行 int a=10; char ch='A'; cout< cout< //输入 // int b; // cin>>b; // cout< //c++中字符串 string 是C++内置的一个专门用于处理字符串的类。代替C语言的char * string s="hello"; string s2("world"); //c++中写法 //传统的遍历方式 for(int i=0;i cout< } cout< //c++11中的遍历方式 for each。 for(char ch:s2){ cout< } return 0; }
二.引用 (掌握)
1.引用概念
概念:相当于给变量取个别名
操作引用就相当于操作变量,注意引用类型和变量类型保持一致
性质1:成为一个变量的引用之后,就不能成为其他变量的引用
#include <iostream> //输入和输出的头文件 using namespace std; //使用标准的命名空间 int main() { int a=10; int& small_a=a; cout<<&a<<" "<<&small_a<<endl; //0x61fe84 = 0x61fe84 int b=20; small_a=b;//这里是把b的值给了small_a cout << a << " " << small_a << endl; //20 20 cout << &a << " " << &small_a << endl; //0x61fe84 0x61fe84 &small_a=b; //错误:不允许再成为其他变量的引用 return0; }
性质2:引用必须初始化并且不可以为NULL
#include <iostream> //输入和输出的头文件 using namespace std; //使用标准的命名空间 int main() { int& a; //错误:引用必须初始化 int & b=NULL; //错误:引用初始化不能为NULL return0; }
性质3:当作为纯数字的引用时,需要加const修饰。代表其引用的数值不可更改
#include <iostream> using namespace std; int main() { //int & a=100; //错误:修饰纯数字未加const const int& a=100; return 0; }
性质4:const修饰的引用,不可以更改变量值。但是变量值更改之后,引用的值是会跟着变化
#include using namespace std; int main() { int a=100; const int& b=a; //b++; //错误:只读不允许修改值 a++; cout << a << " " << b << endl; //101 101 return 0; }
引用的应用:
C++中参数的传递有两种:
1. 值传递 :只是实参的一个拷贝,形参改变不会影响实参的值
2. 引用传递 : 不会产生拷贝副本,相当于操控的变量本身
引用传递可以提高参数的传递效率,因为引用传递就不需要给形参开辟空间,也不需要为其赋值。可以操作使用变量。
如果只是想取到变量值,不做变量值的修改,可以const修饰引用,避免不小心更改到变量的值
三.函数提高
1. 内联函数inline (熟悉)
关键字inline 修饰的函数,取代c语言中的宏定义
作用:编译期会把函数体的内容展开到调用处,节省了函数调用的时间,提高了效率
使用内联函数的条件:
1. 函数体内容少(5行以内)
2. 函数运行时间短,不能复杂的循环
3. 调用频繁
2.函数的默认值(掌握)
函数中参数允许有默认值,如果这个参数不传值,就用默认值。如果传入值,会把默认值覆盖掉。默认值可以提高程序的灵活性。
函数默认值的注意事项:
1.函数声明和定义分离时
声明和定义分离的时候,函数默认只需加在声明处
void draw(string color = "black"); //函数声明 void draw(string color){ cout << "当前画笔颜色:" << color << endl; }
2.函数有多个参数时
当函数有多个参数时,“向后原则”:其中一个参数有默认值,其后的参数都需要有默认值。
void test(int a,int b=20,int c=0){ cout<<a<<" "<<b<<" "<<c<<endl; } int main() { test(10,30); //10,20,30 test(5); //5,20,0 test(10,20,30); //10,20,30 cout <<endl; }
3.函数的重载(掌握)
C++中允许函数重名,处理相同或者相似的业务逻辑。但是需要参数列表不同,参数的个数不同,参数的类型不同,参数的顺序不同进行区分。但是不能通过返回值不同进行区分。
void show(int a){ cout << a << endl; } void show(string buf){ cout << buf << endl; } void show(int a,int b){ cout << a << " " << b << endl; } int main() { show(20); show("LOL"); show(10,30); cout << endl; }
函数重载的注意事项:
函数重载不要和函数默认值一起使用。容易产生错误
练习:写一个计算工资的函数getSalary. 普通文员工资只有基本工资base_salary. 销售的工资包括基本工资base_salary和奖金bonus 。 函数重载形式给出这两个函数
#include using namespace std; void getsalary(int base_salary) { cout << "文员工资:" << base_salary << endl; } void getsalary(int base_salary,int bonus) { int sum = base_salary + bonus; cout << "销售工资:" << sum << endl; }
二、面向对象基础
面向对象的三大特征:
封装、继承、多态
类与对象
物以类聚,人与群分
类:同一类事物(对象)共同特征提取出来,就形成了类。类是抽象的概念
对象:由类创建的具体实体
类中包括属性和行为
属性:描述类的数据,一般都是名词2
行为:描述类的具体操作,一般都是动词
人: 属性:姓名 性别 年龄
行为:吃喝睡 学习 睡觉
电脑: 属性:品牌 型号
行为:播放音乐 播放视频 运行游戏
1.类的实现
#include using namespace std; class Computer{ //class是类的关键字 Computer是类名 public: //公共权限 ,类内和类外都可以访问 string brand; string model; void play_music(){ cout<<"