1.C++语言介绍
c++语言介绍:
https://baike.baidu.com/item/C++/99272
c++开发环境搭建:
https://blog.csdn.net/qxyloveyy/article/details/104225307
2.C++语法基础
①标准库
含义:用于提供部分基础设施,即通过调用标准库,来使用标准库中已经声明的函数。下列代码中通过#include来调用标准库,从而可以在后续代码中使用库中的cout和endl函数。
#include
int main()
{
std::cout<<"Hello,world!"<
②作用域
a)全局作用域:即在函数,类,名字空间定义之外的区域;
b)名字空间作用域:一个名字空间中,namespace ac{};
c)类作用域:一个类定义的文本区域;
d)局部(块)作用域:在一个块或函数体的文本区域;
e)语句作用域:属于语句,如for,while,switch或if语句的文本区域
作用域将代码划分开来保证了代码之间的相对独立性。
③参数传递方式
实参可以是常量,变量或表达式;
实参类型必须与形参相符;
传递是传递参数值,即单向传递
int a,b;
swap(a,b);//值传递,传递后不改变a,b的值
swap(const &a,const &b);//常量引用传递,不改变原来的值
swap(&a,&b);//引用传递,传递后a,b的值发生交换
int add(int x=1,int y=5){return x+y;}//使用默认形参
add(10);//10+5
int add(int x=1,int y=5,int z)//flase
④模块化编程
模块:按功能,概念或者目标划分的独立程序块,
常见的技术有自顶向下,逐步求精;
按功能划分的模块,通常使用函数来表示//double grade(){}
按概念划分的模块,通常使用类来表示//class person{};
按目标划分的模块,通常使用若干相互协作的函数和类来表达
模块具有独立性,分为接口(放在头文件中,.h)和实现(放在源文件中,.cpp)两部分;
模块化编程:按功能或概念进行模块划分,模块间通过彼此的接口相互通信,共同完成程序的目标。
⑤预处理
预处理命令必须以"#“开头,结尾不加分号,可以放在源程序中的任何位置,其有效范围是从出现位置开始到源程序文件末尾。
宏定义:#define 宏名 字符文本//#define pi 3.1415926
文件包含:#include<头文件名>/#include"头文件名”;
条件编译:#ifdef 条件字段…#endef/#if 常量表达式…#else…#endif
⑥自动化构建
核心自动化构建工具make,该工具会读取自动化构建配置文件Makefile,然后调用编译器进行模块的编译,调用链接器进行多模块的链接;
多种Makefile生成器工具–通过读取相应的项目文件,可以生成项目对应的Makefile文件。
QT常使用qmake:
https://baike.baidu.com/item/qmake/10906412?fr=aladdin
其他开发平台通常使用cmake:
https://baike.baidu.com/item/cmake/7138032?fr=aladdin
⑦函数重载
定义多个具有相同名字,不同形参的函数,即签名不同的函数。
函数重载与函数的返回值定义无关。
double grade(double m,double f);
double grade(double m,double f,std::vector&h);
double grade(double m);
⑧头文件和ODR规则
不要在头文件中使用using声明;
头文件可以包含:命名空间,结构体,模板类以及类,局部函数,内联函数,函数,枚举,断言,类型的定义,const常量的定义;
ODR:单一定义规则,用于允许在不同的编译单元中使用来自同一个公共头文件的类型定义;
⑨流的状态及其相关函数
流对象读写数据的操作(>>或<<),可能成功,也可能失败;读写操作会根据操作执行的成功与否来设置流的状态,表达操作的结果;
类std::ios_base定义了用于表示流状态的类型,常量和属性;
std::ios_base是所有对象的基类,因此所有流对象都有一个表示状态的数据成员_M_streambuf_state,这个值可以被多个获取流对象状态的函数读取;
基本的读取状态的函数是rdstate(),它直接返回了表示当前流对象状态的数据成员_M_streambuf_state;
其余的状态读取函数有good(),fail(),eof(),bad()等;
输入流cin:若读取成功返回状态为good的cin;读取失败则返回not good 的cin;如果读取数据错误或不存在,则从读取遇到错误信息开始到后面的读取都会失败,cin处于fail状态,则在读取vector中存放数据之前先判断cin是否为good状态,如果是good,则先清空vector中的原有内容,以确保以前读取的数据被清空。//
istream& read(istream&is,Grade& g){
is>>g.name>>g.midterm>>g.final;
if(is){
g.homework.clear();
double x;
while(is>>x)
g.homework.push_back(x);
is.clear();}
return is;}
⑩异常处理
异常:程序在运行时的非正常行为;典型的异常包括:遇到意外输入,或者失去数据库连接等;
异常处理机制:当这种非正常行为无法直接进行处理时,就需要将相关信息封装在一个对象中,然后将该对象传递给(通常称为抛出)专门的语句块(称为1异常处理器)进行处理;//抛出异常(throw),检查异常(try块),捕获异常(catch块);
抛出异常是一个副作用,所以抛出一个异常的语句不应该再产生其它副作用,尤其是输入和输出;
一组异常类:用于创建包含各种异常信息的对象;
检测异常和生成异常对象并抛出:某个函数调用遇到在当前上下文无法直接处理的错误时,可以创建一个包含错误信息的异常对象并将其返回(throw);//
if(条件)
throw domain_error(“错误信息”);
异常处理(try):以一个try块(监控可能抛出异常的函数调用)开始,一个或多个catch子句(异常处理器)结束;//
try{执行带有throw子句的程序块}
catch(domain_error e)
{
std::cout<
谢谢观看,如果文章对您有帮助,麻烦您点个赞,万分感谢!