C++入门(上)

目录

前言:

一、C++的关键字:

二、命名空间的改进:

1、问题引入:

2、解决方案:

3、理解:

1.命名空间访问的先后顺序:

2、命名空间可以嵌套:

3、命名空间名字相同会合并:

三、C++的输入和输出:

四、缺省函数:

1、定义:

2、缺省参数分类

五、函数重载:


前言:

C++是对C语言进行优化出来的一门语言,所以大多数C语言的知识还可以在C++上使用,甚至可以两者混合使用,毕竟主要是补充C语言的不足。

其中,C语言是面向过程的,C++是面向对象的。

一、C++的关键字:

C++是对C语言进行优化的一门语言,所以C++中的大多关键字和C语言一样,在这个基础上还多有些关键字:

这里就只对这些关键字进行展示,在后面的学习中会对新加的关键字进行学习。

二、命名空间的改进:

1、问题引入:

在C语言中,如下代码会出现重定义的错误:(这里的重定义是在全局变量的地方才会引入命名空间的概念)

cpp 复制代码
#include<stdio.h>
#include<stdlib.h>

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

这是因为在stdlib.h这个库函数中已经对rand进行了定义,所以就会出现重定义的错误。当然不止这些,如果你一开始写了很多行代码写的好好的,但是如果突然包含了别的头文件(在别的头文件中就有可能和你定义了一样名称的全局变量),就有可能会出现重定义的错误。

2、解决方案:

这个时候就可以用关键字namespace进行改进:

通过namespace定义一个命名空间域,随便取名(这里取名为ppr),这个时候namespace就像一堵墙隔开了,全局域和命名空间域,这个时候我要使用我定义的rand就可以用

ppr::rand来进行使用,::左边的是要找的域的地方,如果什么都没有就是在全局域中找rand

3、理解:

1.命名空间访问的先后顺序:

cpp 复制代码
#include<stdio.h>

int a = 0;

namespace ppr
{
	int a = 1;
}

int main()
{
	int a = 2;
	printf("%d\n", a);
	printf("%d\n", ::a);
	printf("%d\n", ppr::a);
	return 0;
}

如上代码:如果没有用::的话,就在局部变量找a,如果::左边什么都没有就是在全局域中找a,如果指定了ppr那当然就是在ppr这个命名空间域中找。

注意:如果在局部变量中没有变量a,那么就在全局变量中找,如果全局变量中也没找到并不用会在命名空间域中找,除非通过(using namespace ppr)将命名空间域展开:

所以:a会现在局部域中找,再在全局域中找,最后展开命名空间域 or 指定访问命名空间域

cpp 复制代码
#include<stdio.h>

namespace ppr
{
	int a = 1;
}
using namespace ppr;

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

using namespace ppr可以理解为将命名空间域释放,所以int a就类似于在全局域中了,就会找到了。

2、命名空间可以嵌套:

cpp 复制代码
#include<stdio.h>
#include<iostream>
using namespace std;
namespace ppr1
{
    int a;
    int b;
    int Add(int left, int right)
    {
        return left + right;
    }
    namespace ppr2
    {
        int c;
        int d;
        int Sub(int left, int right)
        {
            return left - right;
        }
    }
}

int main()
{
    cout << ppr1::Add(1, 2) << endl << ppr1::ppr2::Sub(2, 1) << endl;
    return 0;
}

如上图所示:如果要在嵌套中使用就必须一层一层地访问。

3、命名空间名字相同会合并:

三、C++的输入和输出:

C++中的cout和cin是C++的内置对象(后面学习中在深入讲解)这个在std的命名空间中。

我们可以将其展开后使用。类似于C语言中的(printf和scanf)

cpp 复制代码
#include<iostream>

using namespace std;

int main()
{
	int a ;
	cin >> a;
	cout << "a = " << a << endl;
	return 0;
}

四、缺省函数:

1、定义:

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

cpp 复制代码
#include<iostream>
using std::cout;
using std::endl;

void ppr(int a = 10, int b = 20, int c = 30)
{
	cout << a << endl;
	cout << b << endl;
	cout << c << endl << endl;
}

int main()
{
	ppr();
	ppr(1);
	ppr(1, 2);
	ppr(1, 2, 3);
	return 0;
}

2、缺省参数分类

缺省函数分为全缺省函数半缺省函数
二者就是给的参数如果是全的话就为全缺省函数,如果不是全的话就是半缺省函数,如下:

cpp 复制代码
void ppr1(int a = 10, int b = 20, int c = 30)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }

void ppr2(int a, int b = 10, int c = 20)
 {
     cout<<"a = "<<a<<endl;
     cout<<"b = "<<b<<endl;
     cout<<"c = "<<c<<endl;
 }

上述代码中:ppr1为全缺省函数,ppr2为半缺省函数。

注意:

  1. 半缺省参数必须 从右往左依次 来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现
  3. 缺省值必须是常量或者全局变量
  4. C 语言不支持(编译器不支持)

五、函数重载:

函数重载的意思就是同一个函数名字但是因为传参的不同而导致所使用的函数不同,有三种不同参数的条件:

1、参数类型不同:

cpp 复制代码
int Add(int left, int right)
{
 cout << "int Add(int left, int right)" << endl;
 return left + right;
}
double Add(double left, double right)
{
 cout << "double Add(double left, double right)" << endl;
 return left + right;
}

2、参数个数不同:

cpp 复制代码
void ppr()
{
 cout << "f()" << endl;
}
void ppr(int a)
{
 cout << "f(int a)" << endl;
}

3、参数类型的顺序不同:

cpp 复制代码
void ppr(int a, char b)
{
 cout << "f(int a,char b)" << endl;
}
void ppr(char b, int a)
{
 cout << "f(char b, int a)" << endl;
}

实例:

相关推荐
Python大数据分析@几秒前
python操作CSV和excel,如何来做?
开发语言·python·excel
@小博的博客5 分钟前
C++初阶学习第十弹——深入讲解vector的迭代器失效
数据结构·c++·学习
上海_彭彭26 分钟前
【提效工具开发】Python功能模块执行和 SQL 执行 需求整理
开发语言·python·sql·测试工具·element
3345543234 分钟前
element动态表头合并表格
开发语言·javascript·ecmascript
沈询-阿里38 分钟前
java-智能识别车牌号_基于spring ai和开源国产大模型_qwen vl
java·开发语言
残月只会敲键盘1 小时前
面相小白的php反序列化漏洞原理剖析
开发语言·php
ac-er88881 小时前
PHP弱类型安全问题
开发语言·安全·php
ac-er88881 小时前
PHP网络爬虫常见的反爬策略
开发语言·爬虫·php
爱吃喵的鲤鱼1 小时前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
DARLING Zero two♡2 小时前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技