1 c++是什么?
是一门面向对象的编程语言
2 为什么要学c++
1 找工作
2 服务于QT c++(MFC/QT类库) java c# lua...
UI----》用户
cli->命令行--》专业
3 c++开发工具
1 QT---》安装在纯英文路劲下
2 linux vi test.cpp g++ -o test test.cpp ./test
3 vs
4 c++和C的关系?
c++是在C语言的基础上发展而来的,是C的扩展和延伸
c++完全兼容C,C++在C的基础上增加了一些新的特性,
C++主要增加了面向对象和泛型编程机制,提高了编程开发效率
5 c++的组成?
c++有3个组成部分:
1 面向过程(完全兼容C语言)
2 面向对象(封装 继承 多态)
3 泛型编程(模板 stl)
6 应用领域
游戏 数字图像处理 嵌入式UI 编译器 浏览器 测试程序 停车管理 。。。
c++课程大纲:7+2
day1:c++介绍 c++扩展语法
day2:封装 类 对象 构造函数 析构函数
day3:C++关键字 友元 运算符重载
day4: 模板 STL
day5:继承
day6:多态
day7:c++关键字 异常处理 转化函数 智能指针
day1:
1 c++介绍
2 c++扩展语法--》引用 函数重载 默认参数 new/delete运算符 命名空间 语言链 接性 输出输入
2.1引用
定义:就是变量的别名,和该变量共享一块内存空间,对引用的操作等同于 对变量本身的操作。
引用的定义格式:类型标识符 &引用名=目标变量名
特点:1 定义引用时必须初始化(定义变量、指针可以不用初始化)
2 一个变量可以有多个别名,一个引用名不能对应多个变量
3 引用可以有多级引用,但是不能写成:int &&b=a;//error
只能一级一级引用:int &c=b;int &b=a;int a=10;
4 const修饰的常引用不可以被修改(常引用只能读不能写)
const int &b=a;int a=10;
作用:引用主要用来传递函数的参数和返回值。在c++语言中,函数的参数 和返回值有三种传递方式:值传递 地址传递 引用传递
指针和引用的区别和联系:
1、指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分 配内存空间。
2、引用在定义的时候必须进行初始化,并且不能够改变。指针在定义的时 候不一定要初始化,并且指向的空间可变。(注:引用的值不能为NULL) int &b=NULL;//错
3、有多级指针,int **p=&b;有多级引用,只能有一级一级的引用。int &b=a;int &c=b;
4、指针和引用的自增运算结果不一样。(指针是指向下一个空间,引用时 引用的变量值加1)
5、sizeof 引用得到的是所指向的变量(对象)的大小,而sizeof 指针得到 的是指针本身的大小。
6、引用访问一个变量是直接访问,而指针访问一个变量是间接访问。
2.2函数重载-->g++
定义:函数名相同,函数入参不一样(个数 类型)的设计函数方法。
函数重载与返回值无关。
注意:相同名字的函数之间的关系是重载关系,这些同名函数称为重载函数。
使用时到底调用哪个重载函数?由实参的数据类型和参数个数决定
作用:同一个作用范围对外提供统一的接口,实现不同功能,方便用户调用
那些函数适合设计成重载函数?函数行为相近,在使用时参数个数和类型不一样 的函数可以设计成重载函数
2.3默认参数
定义:在设计定义函数的时候,可以给不太重要的参数一个默认值,如果传实参 ,该参数的值就是实参的值,如果没有传实参,该参数就是用默认值。
特点:1 函数可以有多个默认参数,但是默认参数的设置只能从右到左
2 实参在给形参传值时,是从左到右进行传递的
3 函数在声明的时候有默认参数,在定义时就无需再写默认参数
4 默认参数不能是引用名
5 当默认参数和函数重载一起使用,容易产生二义性,程序员自己避免
作用:在不改变源代码接口的情况下,提高代码的可扩展性
2.4 new/delete运算符
作用:动态申请和释放内存
new/delete用法: 地址=new 数据类型
delete [] p
与malloc/free的区别:
1 new/delete是运算符,使用时不需要加头文件;malloc/free是库函数 ,需要加头文件<stdlib.h>
2 malloc的返回值是void *型指针,需要强转才能使用;new的返回值是 特定的数据类型指针,不需要强转
3 new申请内存的时候已经确定了内存中存放的数据类型,new会做类型检 查,即指针的数据类型要和new后边的数据类型一致
4 malloc申请内存大小需要手动计算;new只需要确定元素个数和类型
5 free的入参是内存的首地址;delete内存要分情况:delete p;delete[]p
6 new一个对象时会自动调用该对象的构造函数,delete一个对象时会自动 调用该对象的析构函数。而malloc/free没有这个功能
2.5命名空间---》名字空间
作用:为了解决C++工程代码中命名冲突问题的
命名空间:本质是划分不同的作用域,用于管理函数名、变量名和类名
c++提供了两种命名空间:
1 标准命名空间--》在c++标准库中已经定义好的名字空间,称为std(标 准命名空间名称)
如何使用?using namespace std;
2 自定义命名空间
如何定义?namespace xxx{}
注:xxx--->自定义命名空间名称
{}---》作用域
如何使用?1 using xxx::变量名/函数名---》声明使用该作用域的变量或 函数
使用该变量或函数();
2 xxx::变量名/函数名();
2.6标准输入输出
c++ 中输出输入用:cout/cin
cout:C console out--->控制台输出
cout是一个输出对象,它在标准命名空间中定义了,使用前要加上:
using namespace std;
如何使用?1 std::cout<<"字符串"<<i<<std::endl;
2 cout<<"字符串"<<endl;
cout<<"字符串\r\n";
cin:C console in--->控制台输入
cout是一个输入对象,它在标准命名空间中定义了,使用前要加上:
using namespace std;
如何使用?cin>>i;
cin>>i>>j;
2.7 语言链接性---》C++和C 语言的混合编程
C++和C的混合编程有两种方式:
1 c++文件中使用C的语法 test.cpp---》使用c++编译器编译
2 c++文件中使用C编写的并且是C编译器编译的库函数,那么要求:
在C++文件中要声明可以使用C库函数(包含头文件),同时要声明C库函 数允许C++程序调用(extern "C" 函数名)
extern "C" :表示将后边声明的函数提供给C++工程使用。
day1作业:
1 分别用值传递 地址传递 引用传递测试两个整数的交换
int sw1(int a,int b);---->不能交换
int sw2(int *a,int *b);----》能交换
int sw3(int &a,int &b);----》能交换
2 指针和引用的区别和联系?
3.用函数重载实现两个int数的乘积,两个float类型的数的乘积,一个int,一个double数的乘积,三个int类型数的乘积。
4 预习类和封装