1.C++入门+基础

这篇博客详细介绍了C++的基础知识,包括命名空间的使用来避免命名冲突,C++的输入输出操作,如何定义和使用缺省参数,函数重载的概念和原理,以及引用的概念、特性、使用场景和与指针的区别。此外,还讨论了extern "C"在C++中调用C静态库的作用和内联函数的优化效果。
摘要由CSDN通过智能技术生成

目录

1.命名空间(namespace关键字)

2.C++输入&输出

3.缺省参数

4.函数重载

5.引用

5.1引用的概念

5.1引用的特性

5.3引用的使用场景

5.4传值、传引用效率比较

5.5常引用

5.6引用和指针的区别

6.extern "C"

7.内联函数

1.命名空间(namespace关键字)

在C/C++中,变量、函数、类等都是大量存在的,这些变量、函数和类的名称都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染。

1.错误代码:

#include <stdio.h>
#include <stdlib.h>

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

这段代码会出现错误:主要原因是:在stdlib.h中存在rand函数,又定义了一个全局变量,会出现命名冲突。所以这样会出现错误或者警告。

2.修改错误代码:利用namespace关键字,

#include <stdio.h>
#include <stdlib.h>

namespace n1
{
	int rand = 0;
}

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

3.命名空间定义

定义命名空间,需要使用到namesapce关键字,后面跟命名空间的名字,然后接一对{ }即可,{ }中

即为命名空间的成员。

普通的命名空间:

命名空间中的内容,可以是定义变量,也可以定义函数。

namespace N1 // N1为命名空间的名称
{
	// 命名空间中的内容,既可以定义变量,也可以定义函数
	int a;
	int Add(int left, int right)
	{
		return left + right;
	}
}

命名空间可以嵌套:

namespace N2
{
     int a;
     int b;
     int Add(int left, int right)
     {
     return left + right;
     }
 
     namespace N3
      {
         int c;
         int d;
         int Sub(int left, int right)
         {
         return left - right;
         }
      }
}

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

namespace N1 // N1为命名空间的名称
{

 int a;
 int Add(int left, int right)
 {
 return left + right;
 }
}
namespace N1
{
 int Mul(int left, int right)
 {
 return left * right;
 }
}

 会合成一个命名空间:

namespace N1 // N1为命名空间的名称
{

 int a;
 int Add(int left, int right)
 {
 return left + right;
 }

 int Mul(int left, int right)
 {
 return left * right;
 }
}

注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。

4.命名空间的使用:

对以下命名空间的使用有三种方式:

namespace N {
 int a = 10;
 int b = 20;
 int Add(int left, int right)
 {
 return left + right;
 }
 int Sub(int left, int right)
 {
 return left - right;
 }

struct Node
	{
		int a;
		char b;
	};
}

1.加命名空间名称及作用域限定符

只有结构体比较特殊需注意。


int main()
{
	//变量的使用:
	printf("%d\n", N::a); 
	//函数的使用:
	N::Add(1, 2);
	//结构体的使用
	struct N::Node node;

	return 0;
}

2.使用using将命名空间中成员引入

using N::a;
using N::Node;//注意结构体
int main()
{
	printf("%d\n",a);
	Node LT;
	return 0;
}

3.使用using namespace 命名空间名称引入(这种方式需要慎用,这样就相当于命名空间失效,空间中所有定义的变量等都是全局)

using namespace N;
int main()
{
	printf("%d\n",b);
	printf("%d\n",a);
	Node LT;
	LT.val = 1;
	return 0;
}

2.C++输入&输出

1.输出

#include <iostream>
using namespace std;
int main()
{
	cout << "Hello world" << endl;
	return 0;
}

需要包含头文件<iostream> ,需要打开std的空间,才能使用cout函数。<< 流插入这个符号可以看作是输出流(流向什么),cout为标准输出(控制台),把"Hello world"字符串流向控制台。endl相当于C语言中的 换行 \n 。>>流提取

注意:早期标准库将所有功能在全局域中实现,声明在.h 后缀的头文件中,使用时只需包含对应头文件即可,后来将其实现在std空间下,为了和C头文件区分,也为了正确使用命名空间,规定C++头文件不带.h;旧编译器(V6.0)中还支持<iostream.h>格式,后续编译器已不支持,因此推荐使用<iostream>+std的方式。

2.输入:输入数据时以空格或回车为两个值的间隔,不会读取

#include <iostream>
using namespace std;
int main()
{
	int a;
	double b;
	char c;

	cin >> a;
	cin >> b >> c;
	cout << a << endl;
	cout << b << c << endl;
	
	return 0;
}

C++的输入输出与C语言的输入输出相比:输入和输出在使用时更加的方便,不需要增加数据格式控制,比如整形%d,字符%c.如果需要控制打印位数或者格式,可以使用printf,C++是支持C语言的,因此,在写代码时,可以写C++也可以写C语言,有点意思。即可以不用,但不排斥。很爽。那个方便就用那个。

3.缺省参数

1.什么是缺省参数

#include <iostream>

using namespace std;

void fun(int a=0)//缺省参数
{
	cout << a << endl;
}
int main()
{
	
	fun(1);//可以传参
	fun();//不传参,打印缺省值
	
	
	return 0;
}

结果:

 2.全缺省参数

#include <iostream>

using namespace std;

void fun(int a=10,int b=20,int c=30)//全缺省参数
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl<<endl;
}
int main()
{
	//全缺省的传参
	fun();
	fun(1);
	fun(1,2);
	fun(1, 2,3);
	return 0;
}

结果:

4.半缺省参数-缺省部分参数-必须从右向左缺省

void fun(int a,int b=20,int c=30)//半缺省参数
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl<<endl;
}

半缺省传参:

#include <iostream>

using namespace std;

void fun(int a,int b=20,int c=30)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl<<endl;
}
int main()
{
	
	
	fun(1);
	fun(1,2);
	fun(1, 2,3);
	return 0;
}

没有缺省的参数必须传参,缺省的参数可以传,也可以不传。 

注意:1.半缺省参数必须从右向左依次给出来,不能间隔给。

           2.给参数时是从左向右依次给。

           3.缺省参数不能再函数声明和定义中同时出现

text.cpp:

#include "test.h"
void StackInit(struct stack* ps, int capacity = 4)//给缺省参数
{

}
void StackPush(struct stack* ps, int x)
{
	//
}

text.h:

#pragma once
#include <iostream>


void StackInit(struct stack* ps, int capacity = 4);

这样会出错,再函数声明和定义只能出现一个。 推荐写在声明中。

缺省参数在实际编程中的意义:

struct stack
{
	int* a;
	int top;
	int capacity;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值