C++入门知识点汇总

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

一、命名空间

1.1命名空间引入

1.2命名空间使用规则

二、C++的输入输出

 

2.1使用输入输出需要头文件iostream

1.3输入a的值

2.4输出a的值

2.5.利用命名空间和c++输如输出的知识可以很好地理解下面的代码

3.缺省函数

3.1,缺省函数简介

3.2.全缺省函数

3.3半缺省函数

4,函数重载

4.1函数重载的定义

4.2为什么c语言不能实现函数重载?

4.3函数重载的作用

4.4代码示例

5,引用

5.1引用简介

5.2引用特点

5.3引用与const

5.4引用与指针

6.内联函数

6.1内联函数简介

6.2,内联函数的特点

7.auto

7.1auto简介

7.2auto识别简单的变量

 7.3auto特性

一、命名空间

1.1命名空间引入

在c语言中我们只有两个作用域:全局作用域和函数作用域。

全局作用域:全局变量和函数的声明定义

局部作用域:形参,局部变量

由于变量、函数、只能存放于这两个域,开发者开发一个项目的时候,大多数情况下我们都是多人合作完成一个项目,那么在我们将多个不同开发者扶着的板块链接的时候,很大可能出现自己写的函数或变量与他人出现同名的情况,这样就会使编译出现错误,而现在命名空间随着c++而引入,相当于一个灵活的文件域,其目的就是为了解决命名冲突的问题。

1.2命名空间使用规则

1.命名空间(使用全局变量在变量前加::(如果主函数有同名变量的话,否者不用加))
2.使用某一个命名空间的变量的话要在前面加命名空间名称::变量名。

3标准c++库所有组件都在std的命名空间里声明和定义的,在标准c++平台调用如下语句

using namesapce std;

二、C++的输入输出

 

c++的输入输出相比来说更加简洁具体表现为

输入输出不需要设置格式c语言中输入char c 输出char c则需要scanf("%c",&c);以及printf("%c",c);而c++没有那么复杂

2.1,使用输入输出需要头文件iostream

c++兼容c语言,c++为了区别c语言的头文件不带.h

例如:#inlcude<iostream>

2.2,流插入流运算符和流提取运算符

流插入:<<

流提取:>>

1.3,输入a的值

cin>>a;

2.4,输出a的值

cout<<a<<endl;(endl为换行)

2.5.利用命名空间和c++输如输出的知识可以很好地理解下面的代码

using namespace std;
//命名空间(使用全局变量在变量前加::(如果主函数同名变量的话,否者不用加))
//使用某一个命名空间的变量的话要在前面加命名空间名称::变量名;
namespace N{
	int a = 20;
}
int a = 30;
int main(){
	int a = 10;
	cout << a << endl;//输出主函数内的a
	cout << ::a << endl;//输出全局域中的a
	cout <<N:: a << endl;//输出命名空间N的a
	system("pause");
	return 0;

}
#en

输出结果:

10

30

20

3.缺省函数

3.1,缺省函数简介

在c语言中,函数没有指定的参数列表,默认可以接收任意多个参数,而在c++中,因为有严格的参数类型检测,没有参数列表的函数,默认为void,即不接收任何参数。

c++指出,在声明或定义函数时,可以给函数带上一个默认值在调用该函数时,如果没有指定实参,则采用改形参的缺省值,否者使用指定的实参。

缺省函数的默认值只能是常量或者全局变量。

3.2.全缺省函数

全缺省:全缺省函数即函数的所有参数都带有默认值,如果没有手动传参,那么编译器会自动使用默认参数列表里的默认值,但是如果我们选择只传一部分的的参数,一部分不传使用默认值,那么我们手动传的的实参会被从左到右进行匹配。

如下面代码中函数

运算结果sum=5;sum2=4;

int add(int x =2, int y = 1){
	return x+y;
}
int main(){
	int a=3, b=2;
	int sum = add(a, b);
	int sum2 = add(a);
	cout << sum <<endl<< sum2 << endl;
	system("pause");
	return 0;
}

3.3半缺省函数

半缺省函数即部分参数有默认值部分没有,但是要注意的是,有默认值的形参要放到函数形参列表的后面。.

int add(int x , int y = 1){
	return x+y;
}
int main(){
	int a, b=2;
	cout << "请输入1个数" <<endl;
	cin >> a;
	int sum = add(a, b);
	int sum2 = add(a);
	cout << sum <<endl<< sum2 << endl;
	system("pause");
	return 0;
}

4,函数重载

4.1函数重载的定义

在c++中,如果多个函数作用域相同,函数名字相同,并且参数列表不同的系列功能类似的函数,我们将其称为函数重载。

注意事项

1.其中,参数列表不同可以具体表现为参数个数,或类型,或类型顺序不同

2.返回值类型和函数重载没有关系,可以相同可以不同。

3.编译器在编译时具体调用哪个函数将去决于调用时传递的什么类型的实参

4.如果没有找到直接匹配的函数,编译器会优先尝试进行隐式类型转换,合适通过编译,否则报错

4.2为什么c语言不能实现函数重载?

更深层次的原因是c和c++编译器在编译阶段对函数名字的修饰规则不同。

4.3函数重载的作用

重载函数通常放在一个作用域内,用同一个函数命名一组功能类似的函数,这样减少了函数名,对程序的可读性有了很大的提升。

4.4代码示例

int add( int a,int b)
{
 return a+b;
}
float add(float a,float b)
{
return  a+b;
}

5,引用

5.1引用简介

引用不是定义一个新变量,而是给已存在的变量起了一个别名,引用变量和被引用的已存变量共用一个内存空间

引用定义格式:类型&引用变量=已定义的变量

5.2引用特点

1.引用变量类型和实体变量的类型必定是一致的。

2.一个实体变量可以有无数个引用变量,但一个引用变量只能在初始化时引用一个实体变量。

3.常量不能被引用

4.如果引用类型作为函数的返回值类型,返回的实体的生命周期一定要比函数长,即不能随着函数的结束而销毁。

5.3引用与const

用const修饰的引用变量它的值不能修改。

例如有时候我们只是想往一个函数中传入实体变量的值或者地址,我们并不想改变它的值,因而用函数的形参由&a改为const &a使得代码的安全性更高

5.4引用与指针

相同点: 

1.在底层实现方式上:指针和引用就是一样的,即引用在底层就是按照指针的方式来实现的

2.引用实际上是有空间的,其空间上放的是引用实体变量的地址。

3.T&可以看成是T* const类型的指针


不同点:

1.在概念层面上:引用是一个别名,与其引用实体共用一个内存空间,编译器不会给引用变量分配新的空间,而指针是有空间的,其空间存储一个变量地址。

2.引用在定义时需要初始化,指针没有要求。

3.引用只能在初始化时引用一个实体,往后不能引用其他实体,而指针可以指向任意一个同类型的实体变量;

4.在sizeof中的含义不同,引用结果为引用类型的大小,但指针始终是地址空间所占的字节数(32位下4字节64位8字节)

5.引用比指针更安全。

6.引用++为实体++,指针++则向后偏移一个类型的大小

7.访问实体的方式不同,指针需要解引用,引用编译器会自己处理。

6.内联函数

6.1内联函数简介

以inline修饰的函数(内联函数)编译时C++编译器会调用内联函数的地方展开,这样会没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。

6.2,内联函数的特点

1.内联函数是用空间换取时间提高程序运行效率的。

2.内联函数对于编译器来说只是一个建议,inline是一个建议性关键字,不同的编译器对于内联函数机制可能不同。一般建议将规模较小的(取决的编译器内部实现)、不是递归,批犯调用的函数采用inline修饰,否则编译器会自动忽略inline的特性。

3.inline不建议声明和定义分开,分离会导致链接错误,因为inline函数被展开,就没有函数地址了,链接就找不到了。

7.auto

7.1auto简介

早期c/c++中auto的含义,使用auto修饰的变量,是具有自动存储器的局部变量,但是从实际效果上看,很少有人会去使用它。

c++11后auto有了新的含义:auto不再是一个存储类型的指示符,而是作为一个新的类型指示符来指示编译器。auto声明变量必须由编译器在编译阶段推导而得。

7.2auto识别简单的变量

#include<stdio.h>
#include<windows.h>
#include<iostream>
using namespace std;
int main(){
	auto a = 3.14;
	auto b = 2;
	auto c = "hello bit!";
	auto d = 'A';
	cout << a << endl << b << endl << c << endl << d << endl;
	system("pause");
	return 0;
}

     566fb8415349447f83fa098ad43807e3.png

 7.3auto特性

1,auto定义变量时必须给出初始化

2,auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时必须加&。

3,当auto在同一行定义多个变量的时,这些变量必须是同一类型,且要被初始化。否则编译器会进行报错,因为编译器实际 只会对第一个变量进行推导,然后用推导出来的类型去定义其他的类型。

4.auto不能作函数形参的类型

5.auto实际中最常见的优势用法就是以后会讲到的c++11提供的新式for循环,还有lambma表达式进行配合使用。

7.4auto循环

对于一个有范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。因此C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围

int main(){
	int a[] = { 1, 2, 3, 4, };
	for (auto temp : a){ 
		cout << temp << "\t"; 
}
	system("pause");
	return 0;
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lya5LiN5Lya44CB,size_20,color_FFFFFF,t_70,g_se,x_16

 7.42auto&可以对数组a中的元素进行修改

int main(){
	int a[] = { 1, 2, 3, 4, };
    cout<<"before:"<<;
	for (auto temp : a){ 
		cout<< temp<< "\t"; 
	}
	cout << endl<<"after:";
	for (auto& temp : a){
		cout << temp + 1 << "\t";
	}
    cout<<endl;
	system("pause");
	return 0;
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lya5LiN5Lya44CB,size_20,color_FFFFFF,t_70,g_se,x_16

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

猜你喜欢

转载自blog.csdn.net/m0_56910081/article/details/123981105