本篇主要介绍C++入门的一些基础知识,包含命名空间、基本输入输出、缺省参数,着重介绍C++的简单内容,若有错误,还望大家不吝赐教。

1、命名空间

using namespace std;

相信大家在接触C++之初,都会先看到这一行代码,心里不由得疑惑,这一行代码是个啥?带着这个疑惑,了解了解namespace这个关键字;

a、背景

顾名思义,namespace便是命名空间;C++之所以提出C中所没有提到过的命名空间,是因为C中有个问题:

  • 变量、函数名的冲突;

    在项目中存在大量代码时,容易存在命名的冲突问题;

如下代码:

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

结果会显示错误:rand重定义,以前定义为函数;明明敲代码时候一切正常,在跑起来之后却出现了问题;

原因是:我们自己定义的rand变量,与C中定义的rand函数发生了命名冲突。这便是提出命名空间的一个问题场景;

b、定义

定义命名空间,需用namespace关键字,如下:

namespace x
{
    int rand = 10;
    
    int Add(int x, int y)
    {
        return x + y;
    }
}

我们定义了名为X的命名空间,其中有rand的整型变量,与Add自定义函数;这也是命名空间的普通定义方式。

补充规则如下:

  • 命名空间可以嵌套定义,在A空间中,可以继续定义命名空间B;
  • 可以在代码的不同位置定义相同名称的命名空间,最终会合成到一个命名空间中;

c、使用

以上为例,

  • 添加命名空间的名称和作用域限定符::

image-20240327094321602.png

此时rand被明确指定为命名空间x中的rand,故代码正常用运行;

  • 使用using将命名空间的某个成员引入;

    需要注意的是,此时上述例子将不可用,因为即便引入了x中的randrand依旧在C中默认存在,因此使用时依旧会冲突;

    namespace x
    {
    	int a = 10;
    
    	int Add(int x, int y)
    	{
    		return x + y;
    	}
    }
    using x::a;
    int main()
    {
    
    	printf("%d\n", a);
    	return 0;
    }
    

image-20240327095011503.png

  • 使用using引入命名空间;

    namespace x
    {
    	int a = 10;
    
    	int Add(int x, int y)
    	{
    		return x + y;
    	}
    }
    using namespace x;
    int main()
    {
    
    	printf("%d\n", a);
    	return 0;
    }
    

    image-20240327095157389.png

    均可正常得到结果;

2、C++中的输入输出

C++中将输入输出取名为流输入流输出,取名为,寓意数据像水一样从一个地方流到另一个地方

a、运算符

>> 与 << ,分别为流提取与流插入运算符,用C的语言来说,可对应sanfprintf

个人认为并不需要刻意记忆哪个运算符对应哪个操作函数,小箭头指向的地方便是数据流向的地方,如下:

int main()
{
    int a;
    char b;
    // 箭头指向变量,代表给变量赋值,c++中,cin支持自动识别变量类型,分别赋值;
    cin >> a >> b;
    // 箭头指向cout,表示输出变量中的值,中间添加了'\n',利用换行将两个变量隔开,此时采用endl,也可达到一样的效果;
    cout << a << '\n' << b << endl;
}

image-20240407110623344.png

b、c++中输入输出的提升

cin 与 cout可以自动识别变量的类型,从而一样的输出代码达到不同的输出效果

同时,加上后续运算符重载,cin与cout甚至可以对结构体使用一样的代码输入输出。

3、缺省参数

a、定义

在声明或定义函数时,可以给函数提供一个缺省值,在调用函数时,若未指定实参,则采用缺省值。如下

void func(int a = 10)
{
	cout << a << endl;
}

int main()
{
	func(1);
	func();
	return 0;
}

image-20240407111625031.png

b、全缺省参数

顾名思义,函数中的每个参数都给上缺省值。

void func(int a = 1, int b = 2, int c = 3)
{
	cout << a << endl;
    cout << b << endl;
    cout << c << endl;
}

此时调用,实参个数不同时,效果如下:

image-20240407112220691.png

若实参数量不够,则函数会按从左到右顺序,依次给形参赋值,未赋值形参则采用缺省值。

c、半缺省参数

同样,半意味着只有一部分,给函数中的一部分参数给定缺省值。

void func(int a, int b, int c = 3)
{
	cout << a << endl;
    cout << b << endl;
    cout << c << endl;
}

值得注意的是,此时调用func至少需要给出两个值,如下,func(10)func()变得不可用;

image-20240407113339646.png

屏蔽之后,输出如下: image-20240407113457219.png

d、注意

  • 半缺省参数,必须从右到左依次给出,不可间隔;

  • 缺省参数不可在声明与定义中同时出现;

    若同时出现且值不同,编译器就无法知道选择哪一个。为了取消这种可能存在的二义性,C++便不允许在声明和定义中同时出现缺省值。