C++入门基础(上)(namespace和缺省参数)

文章目录

一. C++的第一个程序

在c语言中,我们写的第一个程序一般为

c 复制代码
#include<stdio.h>
int main()
{
   printf("hello world\n");
   return 0;
}

而C++的程序为

cpp 复制代码
#include<iostream>
using namespace std;
int main()
{
   cout<<"hello world"<<endl;
   return 0;
}

二. namespace的使用方法

1. namespace的使用价值

在C/C++中,变量,函数,和类都会大量的存在,这些变量,函数,类都会存在于全局变量,可能会导致很多冲突。这个时候我们使用命名空间对标识符的名称进行本土化,

可以有效的避免冲突。

cpp 复制代码
#include<iostream>
using namespace std;
int rand=10;
int main()
{
   cout<<rand<<endl;
   return 0;
}

我门可以看见,编译器报出了rand不明确的错误,这是因为,rand在库中是一个函数的存在,而我们在这里又重新将他定义为变量。

2.namespace的定义

  • 定义命名空间,需要使用namespace关键字,使用时,在namespace后面加上要定义的名字,再加上{},{}中可以有变量,函数,类等。
  • C++中有全局域,局部域,命名空间域,类域,这些域互相独立,不同的域可以定义同名的变量。
  • namespace本质上就是定义出一个命名空间域,与其他的域相互独立,互不打扰。
  • namespace只能定义在全局中,当然可以嵌套其他的定义。
  • 同名的namespace,编译器会将其认整合为一个命名空间。
  • C++的标准库都放在std(standard)的命名空间中。
cpp 复制代码
#include<iostream>
using namespace std;
//1.正常使用
namespace A
{
   int rand=10;
}
int main()
{
   cout<<A::rand<<endl;//::作用域解析符
   return 0;
}
c 复制代码
//2.嵌套使用
namespace A
{
   namespace B
   {
      int Add(int x,int y)
      {
         return x+y;
      }
   }
}
int main()
{
   cout<<A::B::Add(3,4)<<endl;
   return 0;
}
c 复制代码
//3.同名使用
namespace A
{
   int rand=10;
}
namespace A
{
   int Add(int x,int y)
   {
      return x+y;
   }
}
int main()
{
   cout<<A::rand<<endl;
   cout<<A::Add(3,4)<<endl;
   return 0;
}

3.namespace使用

编译器查找一个变量的定义或者声明的时候,默认只会在局部或者全局查找,不会到命名空间中查找,我们要使用命名空间时,有三种办法

  • 指定命名空间访问,在项目中通常使用。
  • 展开,使用using将命名空间某个成员展开,但这种可能会存在冲突,在小的练习中可以使用。
  • 展开命名空间中的全部成员,日常小练习可以使用。
cpp 复制代码
//1.指定命名空间访问
namespace N
{
   int a=5;
}
int main()
{
   std::cout<<N::a<<std::endl;
   return 0;
}
c 复制代码
//2.展开命名空间中指定的成语
using std::cout;
using std::endl;
namespace N
{
   int a=5;
}
int main()
{
   cout<<N::a<<endl;
   return 0;
}
c 复制代码
//3.展开命名空间中的全部成员,这里将标准库的全部成员进行了展开
#include<iostream>
using namespace std;
int main()
{
   cout<<"hello world"<<endl;
   return 0;
}

三.C++中的输入与输出

  • 是input output stream的缩写,是标准的输入,输出流库,定义了标准的输入输出对象。
  • std::cout是iostream类的对象,类似于c语言中的printf
  • std::cin类似于c语言中的scanf
  • std::endl是一个函数,流插入输出时,相当于插入一个换行字符加刷新缓冲区。
  • <<流插入运算符 >>流提取运算符
  • 使用cin和cout时,无需在写变量的类型,他们可以自动识别出。

四. 缺省参数

  • 缺省参数也叫做默认参数,在声明或定义函数时函数的参数指定一个缺省值。在调用函数时,若函数没有指定的实参,则使用缺省参数。(有全缺省和半缺省)
  • 全缺省就是指全部参数给缺省值,半缺省就是部分参数给缺省值。C++规定缺省参数必须从右向左依次给缺省值,不能跨越。
  • C++规定,在给实际参数时,必须从左向右依次给实参,不能跳跃。
  • 函数定义与声明分离的时候,缺省参数只能定义在函数声明中。
cpp 复制代码
//全缺省
void fuc1(int a=10,int b=20,int c=30)
{
   cout<<"a="<<a<<endl;
   cout<<"b="<<b<<endl;
   cout<<"c="<<c<<endl;
}
//半缺省
void fuc2(int a,int b=20,int c=30)
{
   cout<<"a="<<a<<endl;
   cout<<"b="<<b<<endl;
   cout<<"c="<<c<<endl;
}
int main()
{
   fuc1();
   fuc1(1,2);//传实参从左到右
   fuc1(1,2,3);

   fuc2(100);
   fuc2(100,200);
   fuc2(100,200,300);
   return 0;
}
相关推荐
luj_176816 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
不听话坏17 小时前
Ignition篇(下 一) 动态执行前的事情
开发语言·前端·javascript
likeyi0717 小时前
require 和 import的区别
开发语言·前端
远离UE417 小时前
UE5 compute shader 原子加
开发语言·c++·ue5
C+-C资深大佬17 小时前
C++ 显式类型转换详解:static_cast、dynamic_cast、const_cast、reinterpret_cast
开发语言·c++
KaMeidebaby18 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_176819 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
取地址符19 小时前
C++学习笔记(基于learn-cxx)(1)
c++·经验分享·笔记·学习
Mininglamp_271819 小时前
Claude Code 封禁中国开发者之后:本地 AI 编程工具的替代方案实测
开发语言·人工智能·windows·开源软件·ai-native
思麟呀20 小时前
C++17(三)if constexpr+折叠表达式
开发语言·c++