C++入门基础(1)

本文详细介绍了C++中的命名空间概念,如何解决变量冲突,以及命名空间的使用技巧。此外,还涵盖了C++的输入输出、缺省参数、全缺省参数、半缺省参数、函数重载、引用、内联函数、auto关键字和基于范围的for循环。深入浅出地展示了这些关键知识点及其在实际编程中的应用。
摘要由CSDN通过智能技术生成

C++是在C语言的基础上发展起来的,既可以进行C语言的面向程序化设计,也可以进行面向对象程序设计。

命名空间

为了应对大量变量,函数,类的名称在作用域容易发生冲突问题,提出了命名空间,namespace关键字就是用来声明命名空间的

命名空间的定义

namespace N1
{//命名空间中既可以定义变量,也可以定义函数
int m=10;
int MAX(int a,int b)
{
  return a>b?a:b;
}
}
//命名空间可以嵌套定义
namespace N2
{
int m=20;
namespace N3
{
 char *str="hello";
}
}

命名空间的使用

namespace N1
{
int m=10;
int MAX(int a,int b)
{
  return a>b?a:b;
}
}

int usetest()
{
//在使用命名空间变量时,在变量名前加命名空间的名字如 N1::
	cout << N1::m << endl;
	return 0;
}
using N1::MAX
//使用using 将命名空间的变量引入
int usetest_1()
{
  cout << MAX(3, 4) << endl;
}
//使用using 将整个命名空间引入
using namespace N1;
int usetest_2()
{
  cout << MAX(3, 4) << endl;
}

C++的输入输出

c++能够使用c语言的标准输入输出 print及scanf,也能够使用cout控制台输入以及cin键盘输入,在使用C++的标准输入输出时必须包含头文件 iostream以及std命名空间

include<iostream>
using namespace std;
using N1::m;
int main()
{
	m = 13;
	int a = 0;
	cin >> m >> a;
	cout << m <<"  "<< a << " " << 12.34 << endl;
}

输出结果
控制台输入4 12
在这里插入图片描述

缺省参数

在C++中定义或声明函数时,可以为函数参数直接赋值,在函数调用时如果传参就使用传递的参数,没有则使用形参中所赋的值

void fun(int a = 10)
{
	cout << a << endl;
}
int main()
{
	fun(5);
	fun();
}

输出为
在这里插入图片描述

全缺省参数

全缺省参数即在函数的声明定义中对每个参数都赋有初始值,在函数调用时可以省略所有参数传递

int  Add(int a=5,int b=10,int c=20)
{
	return a + b+c;
}
int main()
{
	cout << Add() << endl;
	cout << Add(1) << endl;
	cout << Add(1,2) << endl;


输出结果
在不传参数时,会使用默认值,在传一个参数是会先对第一个参数赋值,其余参数使用默认值,在传两个参数时会对前两个参数进行赋值,最后一个参数使用默认值。
在这里插入图片描述

半缺省参数

半缺省参数必须由右往左依次赋值

//注意:不能跳过b和c直接给a传参,也不能跳过c往a和b的形参中赋值
int  Add(int a,int b=10,int c=20)
{
	return a+b+c;
}
int main()
{
   //因为函数传参是由左向右依次赋值的
	cout << Add(1) << endl;
	cout << Add(1,2) << endl;
	cout << Add(1,2,3) << endl;
}

输出结果
在这里插入图片描述

函数重载

在c++中可以在同一作用域声明或定义函数功能相同参数不同的同名函数

int  Add(int a,int b,int c)//参数个数不同,这里不要定义缺省参数
{
	return a+b+c;
}
int Add(int a, int b)
{
	return a + b;
}
double Add(double a, int b)//参数类型不同
{
	return a + b;
}
double Add(int a, double b)//参数顺序不同
{
	return a + b;
}

引用

引用类型是C++中的一个新的数据类型,不是定义一个新变量,而是已有变量的别名,与已有变量共用同一份内存空间

 int a=10;
 int &b=a;//引用在定义时必须进行初始化

对b进行修改a也会得到修改,根据这种特性我们可以在函数传参数时使用引用达到修改实参的目的
在C语言中我们需要通过形参改变实参的值,则在函数传递的过程中需要用到指针
例如:

swap(int *a,int *b)
{
 int temp;
 temp=*a;
 *a=*b;
 *b=temp;
 }
 int main()
 {
  int a=10,b=20;
  swap(&a,&b);
 }
 //在交换函数中需要通过指针传递地址实现在函数中对实参修改的作用

在c++函数传参中使用引用类型

//将函数参数类型设为引用类型
void swap(int& a, int& b)
{
	int temp;
	temp = a;
	a = b;
	b = temp;
}
int main()
{
	int left= 10,right = 20;
	swap(left, right);//a是left的别名,修改a也就是修改left
	cout << left<< " " << right << endl;
	return 0;
}

引用和指针的区别

1.引用使用必须进行初始化;
2.引用在初始化,引用一个实体后不能改变,指针可以改变其指向对象
3.没有空引用,可以有空指针
4.在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节);
5.引用比指针使用起来相对安全;
6.引用自加为引用实体自加,指针自加则是指针偏移一个类型大小;
7.有多级指针没有多级引用;
8.指针在使用时需要解引用,引用不需要;

内联函数

以inline修饰的函数叫做内联函数,内联函数在编译器编译时会在调用函数的地方将其展开,没有函数压栈的开销,能够提高程序运行效率
inline 修饰函数只是编译器做的一个优化,在debug模式下还是会正常进行函数调用call,在release模式下会直接在调用时展开;
注意:inline的函数声明和定义不要分离,否则会链接失败。

auto关键字

auto关键字区别于c语言中的自动存储器的局部变量,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。
例如:

struct stu
{
	char name[20];
	int age;
}stu;
int main()
{
    auto b=12;//auto为int型
	stu.age = 18;
	strcpy(stu.name, "李华");
	auto b = stu;//auto则为数组类型
	cout << b.age << endl;
	cout << b.name << endl;
	return 0;
}

基于范围的for循环

for循环后的括号内语句由冒号“ :”分为两部分:第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。

	char str[]= "hello";
	for (auto e : str)//迭代范围必须是确定的,对于数组而言就是数组的第一个元素到最后一个元素
	{
		cout << e << endl;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值