C++入门基础简述

在这里插入图片描述

前言

此篇文章主要简述流程:C++首个程序 -> namespace关键字 -> C++输入/输出 -> 缺省参数 -> 函数重载 -> 引用。

1、C++首个程序

  1. C语言中第一个程序的写法:
//C语言中的第一个程序
#include<stdio.h>

int main()
{
	printf("Hello World!\n");
	return 0;
}
  1. C++第一个程序的写法:
//C++语言第一个程序
#include<iostream>
using namespace std;
int main()
{
	cout << "Hello World!" << endl;
	return 0;
}

从对比可以看出两者的差异,一开始只要记住该格式就ok!

2、namespace关键字

含义:命名空间。
主要作用:解决命名冲突的问题。(变量名、函数名、类型名);

  1. 在C++中,4大区域:函数局部域、全局域、命名空间域、类域;其中函数局部域和全局域会影响编译查找逻辑和变量的生命周期,后两者不会影响影响变量的周期。

namespace的定义:
格式:namespace { 函数、变量、类型 }
注意:namespace只能定义在全局区,也就是主函数的外面,同=时支持嵌套定义。具体例子如下:

  • 这个例子可以看出命名冲突的情况:
#include<iostream>
int rand = 10;
int main()
{
	printf("%d\n",rand);
	return 0;
}

在这里插入图片描述

  1. 解决上面的问题就用到namespace。
#include<iostream>
namespace variable
{
	int rand = 10;
}

int main()
{
	printf("%d\n",rand);
	return 0;
}

写成这样可以解决命名冲突的问题,但怎样访问自己定义的rand数据呢?需要用C++中的作用域::

#include<iostream>
namespace variable
{
	int rand = 10;
}

int main()
{
	printf("%d\n",variable::rand);
	return 0;
}

在这里插入图片描述

3、C++输入/输出

  1. 头文件<iostream>表示input output stream的缩写,是标准的输入、输出流库。
  2. std::cin是istream类的对象,主要面向窄字符的标准输入流。
  3. std::cout是ostream类的对象,主要面向窄字符的标准输出流的。
//C++输入/输出
#include<iostream>
using namespace std;
int main()
{
	cout<<"C++你好!"<<endl;//endl就是换行的
	return 0;
}

4、缺省参数

  1. 缺省参数的含义:简单说就是我们在声明或定义函数的时候,给参数给定一些初始值,当我们在调用函数的时没给实参的时候就会用参数中的初始值。
  2. 分类:全缺省参数、半缺省参数。
  3. 全缺省参数:给函数的形参都给一个初始值(缺省值);
  4. 半缺省参数:给函数中部分形参给缺省值。
  5. 注意:C++规定半缺省参数的时候,必须从右往左一次缺省(给初始值),必须是连续的,不能间隔。
  6. 当函数的声明和定义分开的时候,缺省参数不能再声明和定义中同时出现,规定必须函数声明给缺省值。

代码例子如下:

//缺省参数
#include<iostream>
using namespace std;
//全缺省参数
void func1(int number=20)
{
	cout << "number=" << number << "\n";
}
int main()
{
	func1();
	func1(666);
	return 0;
}

在这里插入图片描述

  • 全缺省参数和半缺省参数
//全缺省参数和半缺省参数的区别
#include<iostream>
using namespace std;
//全缺省参数
void func2(int a=10,int b=20,int c=30)
{
	cout << "a+b+c=" << a + b + c << "\n";
}
//半缺省参数
void func3(int a,int b=20,int c=30)
{
	cout << "a+b+c=" << a + b + c << "\n";
}
int main()
{
	func2();
	func3(40);
	return 0;
}

在这里插入图片描述

5、函数重载

  1. 含义:在同一作用域中出现相同的函数名。在C++中函数重载可以表现出多态的行为,使用更灵活。
  2. 函数重载的条件:①函数名必须相同。②访问修饰符无要求。③返回值类型无要求。④函数的参数列表必须不同(参数个数不同、参数类型不同、参数的顺序不同)。

下面是函数重载的例子:加法函数实现不同类型的相加

//函数重载
#include<iostream>
using namespace std;
void Add(int a, int b)
{
	cout << "a+b=" << a + b << "\n";
}
void Add(double a, double b)
{
	cout << "a+b=" << a + b << "\n";
}
int main()
{
	Add(10, 20);
	Add(1.5, 1.5);
	return 0;
}

在这里插入图片描述

6、C++中的引用

  1. 引用的概念:记住一句话就是引用就是给变量取别名,并且编译器不会给引用变量开辟内存空间的,它和引用的变量共用一个内存空间(原来的内存空间)。简单例子就是《水浒传》各个英雄好汉的外号。
  2. 引用的定义格式:类型名& 引用的别名 = 引用对象;在语言中&表示取地址,C++中是引用别搞混了喔。

我们在使用引用的时候的注意事项:
①引用在定义必须初始化。
②一个变量可以有多个引用,但是一个一会引用只能用于一个变量(引用一旦引用了一个实体后,就不能引用其他实体了)。
③引用也可以被引用。(就是一个变量被引用后,那个引用的又可以取别名。)

  1. 引用的具体应用:
    ①主要用于函数传参和函数的返回值,这样可以减少拷贝从而提高效率。
    ②在改变引用后,被引用对象会跟着改变。
  2. 具体例子如下:
//引用的应用(交换两个数)
#include<iostream>
using namespace std;
void Swap(int& a, int& b)
{
	int tmp = a;
	a = b;
	b = tmp;
}
int main()
{
	int number1 = 100;
	int number2 = 200;
	cout << "number1=" << number1 << "  " << "number2=" << number2 << "\n";
	Swap(number1, number2);
	cout << "number1=" << number1 << "  " << "number2=" << number2 << "\n";
	return 0;
}

可以看到引用的变量和被引用对象是同一个内存空间。
在这里插入图片描述

7、const 引用

const引用就是被引用对象是const修饰的。

  1. 在使用const 需要提到权限缩放。例如:
//const 引用
#include<iostream>
using namespace std;
int main()
{
	权限放大
	//const int number = 10;//只读的权限,因为const修饰的
	//int& rnu = number;//变为了可读可写的,因此报错

	//权限缩小可以
	int number2 = 30;
	const int& rnu = number2;
	cout << "rnu=" << rnu << "\n";
	//平级的可以
	int number3 = 40;
	int& rnu1 = number3;
	cout << "rnu1=" << rnu1 << "\n";

	return 0;
}
  1. 临时对象的情况:产生条件是一个表达式、函数调用返回值、类型转换。编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象,在C++中把这个未命名对象叫做临时对象。
  2. 比如说:
#include<iostream>
using namespace std;
int main()
{
	int a = 10;
	int b = 20;
	//int& rab = a + b;//a+b是临时变量,临时变量具有常性,需要const修饰
	const int& rab1 = a + b;
	cout << "rab1=" << rab1 << "\n";
	return 0;
}

8、指针和引用的关系

①首先从语法上看,引用就是给变量取别名,不用开辟内存空间,是和被引用对象共用内存空间的;但是指针是存储变量的地址的,是需要开辟新的内存空间的;
②从使用角度看,引用在使用的时候必须初始化的,而指针从语法不是必须初始化的,但是建议初始化,避免野指针。
③引用在引用一个对象后,就不能再引用其他对象,但是指针可以不断改变指向的对象。
④引用可以直访问所指的对象,而指针需要解引用才可以。
⑤在引用的条件下,sizeof表示引用类型的大小,但是指针使用sizeof则是表示不同操作系统下所占字节个数(32位中占4位,64位下占8位)
⑥从安全角度看,指针很容易出现野指针,而引用相对来说不太容易出现。

9、inline关键字

inline关键字:只要是该关键字修饰的函数叫做内联函数。我们在编译C++编译器的时候,会在调用函数的地方展开内联函数,这样调用内联函数就需要建立栈帧,从而提高效率。
应用地方:主要是用于频繁调用的短小的函数。不适合递归函数。

10、nullptr关键字

nullptr实质是一个宏;
在C++中,NULL定义成为了0,然而在C语言中被定义成为的是空指针;为了防止下面错误的发生:
在这里插入图片描述
于是在C++中又定义了nullptr指针,是一种特殊的关键字,它可以转换成任意其他类型的指针类型。使⽤nullptr定义空指针可以避免类型转换的问题,因为nullptr只能被隐式地转换为指针类型,⽽不能被转换为整数类型。

1.1 C++程序结构 (Structure of a program) 下面我们从一个最简单的程序入手看一个C++程序的组成结构。 //〖 阳光板 ☆ WWW.CHIANCESS.COM 〗 my first program in C++ #include using namespace std; int main() { cout << “Hello World!”; return 0; } Hello World! 上面左侧显示了我们的第一个程序的源代码,代码文件名称为hellowworld.cpp。右边显示了程序被编译执行后的输出结果。编辑和编译一个程序的方法取决于你用的是什么编译器,根据它是否有图形化的界面及版本的不同,编译方法也有可能不同,具体请参照你所使用的编译器的使用说明。 以上程序是多数初学者学会写的第一个程序,它的运行结果是在屏幕上打出”Hello World!”这句话。 虽然它可能是C++可写出的最简单的程序之一,但其中已经包含了每一个C++程序的基本组成结构。 下面我们就逐个分析其组成结构的每一部分: // my first program in C++ 这是注释行。所有以两个斜线符号(//)开始的程序行都被认为是注释行,这些注释行是程序员写在程序源代码内,用来对程序作简单解释或描述的, 对程序本身的运行不会产生影响。在本例中, 这行注释对本程序是什么做了一个简要的描述。 # include 以#标志开始的句子是预处理器的指示语句。它们不是可执行代码,只是对编译器作出指示。在本例中这个句子# include 告诉编译器的预处理器将输入输出流的标准头文件(iostream.h)包括在本程序中。这个头文件包括了C++中定义的基本标准输入-输出程序库的声明。此处它被包括进来是因为在本程序的后面部分中将用到它的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值