C++基础 ----课后总结(1)

2023-12-15 15:20:09

1、C++

C++ 是一种通用的、面向对象的编程语言,它是 C 语言的扩展,并支持高级特性如泛型编程、模板、继承和多态等。C++ 由 Bjarne Stroustrup 在 1980 年代初期创建。C++ 既可以作为系统编程语言,也可以用于开发应用程序和库,它具备高效性、可移植性、可扩展性和可重用性等优势。C++ 还是许多流行开源项目如操作系统内核和数据库引擎的首选语言。另外,C++ 可以与 C 语言混合编程,因为它兼容 C 语言标准库并支持低级操作,这样使得C++ 在保持高级特性的同时仍能兼顾底层程序设计和性能优化需求。


(1)新增自定义的类型转换


?? ?C语言:
?? ??? ?实现基本数据类型的转换
?? ??? ?对于非基本的数据类型转换,不能实现转换
?? ?C++:
?? ??? ?实现基本数据类型的转换
?? ??? ?实现自定义类型的转换,例如:类类型的转换


(2)严格的数据类型检查


?? ?C++是一门静态型语言,如果程序有错误,在编译阶段就会将错误提出来
例如:
?? ?C语言: ?C语言的类型检查不是很严格? 在某些场景他仅仅是报警告但是程序依旧可以运行。

(3)新增变量引用


?? ?引用:
?? ??? ?符号:&
?? ?解释:
?? ??? ?引用实质上是给已经存在的变量取一个别名
?? ?使用格式:
?? ??? ??? ?数据类型 ?& 别名=已经存在的变量名 ; ?//数据类型:基本数据类型(int ,char),自定义类型:类类型
?? ??? ?例如:
?? ??? ??? ?int b=20;
?? ??? ??? ?int ? & ?a = b; ? //给存在的变量b取一个别名输出结果为a和b的值都为20;

#include "iostream"
using namespace std;
int main()
{
int a=20;
int &b=a;

cout<<"a的值"<<endl;
cout<<"b的值"<<endl;
}

注:
?? ?(1)编译器不会给引用变量另外开辟空间
?? ?(2)引用类型的变量一旦存在必须对其进行初始化工作
?? ?(3)引用类型的变量必须与一个已经存在的变量进行绑定
面试题:指针与引用的区别

指针是一个变量,保存了一个内存地址,可以通过解引用操作符 * 来获取该地址处存储的值。指针可以为空(nullptr),也可以指向任何类型的对象。指针可以被重新赋值,使其指向其他对象或者空。

引用是一个别名,它提供了对已存在的变量的另一种名称。引用必须在声明时初始化,并且不能重新绑定到其他变量。引用本身并不占据额外的内存空间,它直接引用了变量所在的内存位置。

实现两个数的交换,要采用多种值传递的方式实现(函数参数值传递)

#include "iostream"
using namespace std;
void change_value(int a, int b)
{
	int temp=0;
	temp=a;
	a=b;
	b=temp;
}
void change_value1(int *a , int *b)
{
	int temp;
	temp=*a;
	*a=*b;
	*b=temp;
}
void change_value2(int &a , int &b)
{
	int temp=0;
	temp=a;
	a=b;
	b=temp;
}



int main()
{
	
	
	int m=10;
	int n=20;
	//change_value(m,n);
	cout<<"交换之前m:"<<m<<endl;
	cout<<"交换之前n:"<<n<<endl;
	change_value2(m,n);
	cout<<"交换之后m:"<<m<<endl;
	cout<<"交互之后n:"<<n<<endl;

	//cout<<"a的地址:"<<&a<<endl;
	//cout<<"b的地址:"<<&b<<endl;
	//cout<<"c的地址:"<<&c<<endl;
	//cout<<"a="<<a<<endl;
	return 0;
}

(4)新增函数带默认值参数


?? ?函数中的参数在声明的时候带了一个默认值
格式:
?? ?函数返回值 ?函数名(参数1 , 数据类型 ?标识符=初始值)
?? ?{

?? ?}
例如:
?? ?void ? function(int a , int b=20) //参数b带默认值
? ? {
?? ?}
如何调用带默认值的函数?
?? ?(1)不更新默认值的形式调用
?? ??? ?例如:
?? ??? ??? ?function(40) //正确?? ?
?? ?(2)更新默认值的形式调用
?? ??? ?例如:
?? ??? ??? ?function(40,30);//正确

写法上,要将不带默认值的参数放在带默认值的参数前

(5)新增了函数重载以及运算符重载


运算符重载:略
函数重载:
?? ?是指函数名相同,函数的参数类型或参数个数或参数的顺序不同,即可发生函数重载,c语言不能发生函数重载。?函数重载与函数返回值无关。

C++语言:
?? ?支持函数重载
?? ?练习:
?? ??? ?有一个同名函数,实现的功能是不同类型的数据进行交换
内联函数:
?? ?声明:
?? ??? ?关键字:inline ? ?//用于声明一个函数是内联函数

?? ?格式:
?? ??? ?inline ?函数返回值 ?函数名 (参数列表)
?? ??? ?{

?? ??? ?}
?? ?例如:
?? ??? ?inline ? void ?function()
?? ??? ?{

?? ??? ?}
内联函数的使用:
?? ?针对使用频度高的代码,且短小精简
?? ?提高了编译器的执行效率

?? ?面试题:
?? ??? ?对于使用频度高的函数,怎么设置才会提高编译器的执行效率?C语言怎么设置?C++怎么设置?

c语言使用宏定义

c++使用内联函数

(6)新增了智能指针


?? ?作用是防止内存泄露,即将用户用裸指针开辟的堆空间的权利交给智能指针去管理


(7)新增了异常处理机制


?? ?C++可以主动产生异常,也可以主动捕获异常并处理

2、C++文件架构及后缀


文件架构:
?? ?(1)主程序文件:cpp
?? ??? ?在该文件里包含了一个main函数,就称该文件为主程序文件
?? ??? ?编译器在执行时,执行的是主程序文件
?? ??? ?放置变量的初始化,函数的定义或实现,类的声明或实现等等
?? ?(2)头文件:.h
?? ??? ?该文件里主要放置变量的声明、函数的声明、类的声明等等
?? ?(3)源文件:.cpp
?? ??? ?该文件里主要放置变量的初始化,函数的定义或实现,类的成员函数的实现等等
文件后缀:
?? ?以windows为主:
?? ??? ?C++后缀:.cpp
?? ?以linux为主:
?? ??? ?C++后缀:
?? ??? ??? ?.cpp、.cs、.css等等
?? ??? ?常用的后缀是.cpp
编译器:
?? ?Linux中C语言文件使用gcc进行编译
?? ?LInux中C++文件使用g++进行编译
编译器的执行流程:
?? ?(1)预处理
?? ??? ?工作内容:
?? ??? ??? ?a、将源文件以外的内容全部加入到源文件中
?? ??? ??? ?b、删除掉注释
?? ??? ??? ?c、进行宏替换工作?? ?
?? ??? ??? ?d、条件编译
? ? ? ? ??
?? ?(2)编译
?? ??? ?工作内容:
?? ??? ??? ?a、将用户编写代码转换成汇编语言
?? ??? ??? ?b、检查用户编写代买是否符合语法规范
?? ?(3)汇编
?? ??? ?工作内容:
?? ??? ??? ?a、将编译阶段翻译的汇编语言转换为机器语言
?? ?(4)链接
?? ??? ?工作内容:
?? ??? ??? ?a、生成可执行文件

?? ??? ???

?面试题:
?? ??? ??? ??? ?静态库和动态库的区别?

链接方式:静态库在编译时被完全复制到可执行文件中,与可执行文件链接为一个独立的可执行文件;而动态库在运行时被加载到内存中,并由多个可执行文件共享使用。

3、C语言和C++的区别

编程思想上:
?? ?C语言:面向过程的语言,侧重点是在于过程
?? ?C++:既面向过程也面向对象,C++的侧重点是在于对象
?? ??? ?面向对象编程:
?? ??? ??? ?将一切事物看成是对象,一切皆对象
从使用上:
?? ?参考C++是C的增强?

? ??? ?
4、了解的基本术语

(1)类
?? ?类是用于描述事物的特征和行为
(2)对象
?? ?对象是类的实例化的过程
(3)特征
?? ?是指变量或属性、成员变量
(4)行为
?? ?是指函数或方法、成员方法
(5)继承与多继承
?? ?一个新的类共享一个或多个已经存在的类的方法和属性
(6)聚合或组合
?? ?一个类包含了另外一个类的对象,称之为“组合或聚合”
(7)静态绑定
?? ?一个函数或表达式的地址在编译时就已经确定,称之为“静态绑定”
(8)动态绑定
?? ?一个函数或表达式的地址在运行时才确定,称之为“动态绑定”
(9)多态
?? ?一种接口,多种实现方法?

5.介绍第一个C++程序

#include "iostream"
//#include宏,用于包含其它的库文件
//库文件:iostream    //输入/输出流类:包含了输入流(用于输入数据)和输出流(用于输出数据)
//iostream    i:input   o:output    stream:流
//iostream : istream(输入流)和ostream(输出流)
//istream:对象:cin  ----  istream  cin
//ostream:对象:cout ----  ostream  cout

//符号:<>  或  “”
//<>括号括起来的库:编译器首先是从C++标准库寻找库文件,然后再从项目中寻找该文件
//“”括号括起来的库:编译器首先是从项目中寻找库文件,然后再从C++标准库中寻找该文件

//iostream后面没有.h后缀
//如果使用C++标准库里提供的库文件,则不需要加上后缀.h
//如果使用用户自己定义的库文件,则需要加上后缀.h

//using namespace std;//使用的是C++提供的命名空间
//命名空间里存放了C++实例化的流对象:cin、cout、endl、cerr、clog等等

/*
int main() //程序的入口地址
{
	cout << "hello world" << endl;//第一个C++代码
	cout输出流对象:将数据从内存里取出来输出到控制台或显示器
	endl:结束换行
	符号“<<”(输出符号:数据从内存流向控制台):在C语言中表示移位运算符,在C++中对该运算符进行重载,表示数据的流动方向
	符号“>>”(输入符号:数据从控制台流向内存):在C语言中表示移位运算符,在C++中对该运算符进行重载,表示数据的流动方向
	  “//”表示行注释    表示块注释   快捷注释:ctrl+shift+/
	return 0;
}
*/
//#include "iostream"
using namespace std;
int main()
{
	cout << "hello world" << endl;
	return 0;

}

?

文章来源:https://blog.csdn.net/qq_66337990/article/details/132746967
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。