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;
}

实例:

相关推荐
Yhame.2 小时前
深入理解 Java 中的 ArrayList 和 List:泛型与动态数组
java·开发语言
编程之路,妙趣横生2 小时前
list模拟实现
c++
mazo_command4 小时前
【MATLAB课设五子棋教程】(附源码)
开发语言·matlab
IT猿手4 小时前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab
青春男大4 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
88号技师4 小时前
几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
Zer0_on4 小时前
数据结构栈和队列
c语言·开发语言·数据结构
一只小bit4 小时前
数据结构之栈,队列,树
c语言·开发语言·数据结构·c++
一个没有本领的人5 小时前
win11+matlab2021a配置C-COT
c语言·开发语言·matlab·目标跟踪
一只自律的鸡5 小时前
C项目 天天酷跑(下篇)
c语言·开发语言