C++入门之基础语法

目录

一.关键字

二.命名空间

2.1命名空间域 

 2.2展开命名空间域 using namespace bit

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

2.3 头文件#include

2.3.1 头文件的展开和命名空间的展开区别

2.4 C++的标准的库命名空间std

2.5 命名空间的套娃

三. C++输入输出

3.1 流插入cout<<

3.2 C++换行endl

3.3 流提取cin>>  

四.缺省参数(默认参数)

4.1 全缺省

但是,实参只能从左往右传,不允许跳跃缺少

 4.2 半缺省 形参必须从右往左给(缺省),也不能跳跃

4.3 缺省的应用场景 

4.4 如果是在声明和定义分离的情况 

 规定:缺省值只能在声明部分给缺省值,不能同时给缺省值,否则会冲突。

五.函数的重载 

参数不同一:参数的类型不同

参数的不同二:参数的个数不同

参数的不同三:参数的顺序不同 

C++是如何实现重载的 


一.关键字

c++包含c语言的关键字,C++有63个,C语言有32个

C++入门之基础语法_第1张图片

二.命名空间

 在C语言里,如果出现定义两个名字相同的变量,或者定义一个和关键字相同的变量那么就会出现命名冲突。如:自己定义了一个变量rand,和C语言的关键字rand重复,所以会导致冲突。或者在同一个域里定义同一个变量也会导致冲突。

但是,如果是在不同的域里定义同一变量是可以的。

如下面代码,第一个输出的是局部变量x=1;第二个输出输出的是全局变量0;

这是因为这两个x不在一个作用域,第一个x是在main函数外部是全局变量,第二个x是在main函数里面是局部变量,他们的域不同,所以同名不会导致冲突。

如果要访问全局变量,那么就可以用域作用限定符 ::。

域作用限定符用法::

当限定符左部没有给东西时,默认代表访问全局变量,__::x.

当限定符左边给了作用域时,访问其作用域。

int x = 0;
int main()
{
    int x = 1;
    printf("%d\n",x);    //输出1
    printf("%d\n",::x);    //输出0
}

2.1命名空间域 

如果要在同一个域里定义同一个变量,如想在全员变量域里定义两个x。那么就需要命名空间域。

namespace (域名自己定义)

1. 全局域和局部域会影响生命周期,也会影响访问。

2. 命名空间域不会影响生命周期,只会影响访问。

3. 命名空间域,只能定义在全局。

4. 命名空间域,可以定义变量,结构体,函数,同样也需要指定作用域,命名空间也可以套命名空间。

编译器是先局部后全局 

访问命名空间域的变了,在域作用限定符的左部加上域名。就不用再进行先搜索局部,在搜索全局

namespace bit
{
    int x = 0;            //定义变量
    int add(int x,int y){}    //定义函数、
    
    
    
}
namespace bit2 
{
    int x = 1;
}

int main()
{

    printf(“%d\n”,bit::x);
    printf(“%d\n”,bit1::x);
    printf(“%d\n”,bit::add(1,2));
    

}

特殊情况 

 对于定义结构体,需要在struct后面加域作用限定符。

struct bit1::node phead;

 2.2展开命名空间域 using namespace bit

如果不用using展开,那么在使用这个命名空间域里的变量时就需要用域作用限定符,指定作用域。

但是用using展开,就是相当于将命名空间域的权限放开,相当于将变量等的作用域开放到全局域,不需要::域作用限定符,也不会要指定命名空间。

 

using namespace bit;
int main()
{
    struct QNode node1;//不需要用::限定
}

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

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

2.3 头文件#include

2.3.1 头文件的展开和命名空间的展开区别

头文件的展开是应为编译器只会编译.c或者.cpp文件,所以要将头文件的内容拷贝到 .c或者.cpp文件,叫头文件的展开。

命名空间的展开的意思是:将命名空间的权限放开,让其内容相当于放入全局域,不用::限定符

2.4 C++的标准的库命名空间std

        若要用这个std空间域的东西,可以用两种方法。

        方法一:使用展开 using namespace std;//这个方法在实际开发中不推荐

        方法二:用::指定std的作用域。

        方法三: 只展开命名空间里的某几个变量,using std::count;

2.5 命名空间的套娃

例如如果在实际开发中,一个项目的代码全放在一个命名空间里如bit,那么难免会有函数,变量等充满,那么可以按名字子啊定义一个命名空间。

namespace bit
{
    namespace pyf
    {
        void push()
        {
             count<<"pyf"<

 在主函数里调用时,要用两次域作用限定符。

三. C++输入输出

1. <<单独使用是左移符,与C语言一样

2. 如果和cout一起使用,cout<< 是流插入

3.1 流插入cout<<

        C++可以自动识别类型的 

        如cout<<"hello world":就是将"hello world"流入控制台console

3.2 C++换行endl

        C++可以写\n,最好写endl

         cout<<"hello world"<

3.3 流提取cin>>  

四.缺省参数(默认参数)

4.1 全缺省

在形参后面默认一个参数,在实参没有传参时有个默认值 

C++入门之基础语法_第2张图片

缺省参数的好处是,可以实参只传1个2个,或者不传

C++入门之基础语法_第3张图片 

但是,实参只能从左往右传,不允许跳跃缺少

 不允许跳跃,如

 4.2 半缺省 形参必须从右往左给(缺省),也不能跳跃

C++入门之基础语法_第4张图片

 

4.3 缺省的应用场景 

一. 

我们知道顺序表C语言就需要遇到扩容问题,但是C语言是规定死的扩容一定的量,如扩容100个,但是只需要十个,那么就会导致90个空间浪费。

那么我们C++里面可以给参数n缺省一个值4(可以换其他),那么在入栈时,直接入多少空间的元素,那么就可以开辟多少空间。

C++入门之基础语法_第5张图片

 C++入门之基础语法_第6张图片

4.4 如果是在声明和定义分离的情况 

 规定:缺省值只能在声明部分给缺省值,不能同时给缺省值,否则会冲突。

 C++入门之基础语法_第7张图片

五.函数的重载 

C语言是不能出现同名函数的。

C++是允许同名函数的,但是不允许参数相同。

而且C++可以自动匹配参数类型。

参数不同一:参数的类型不同

C++入门之基础语法_第8张图片

参数的不同二:参数的个数不同

 C++入门之基础语法_第9张图片

参数的不同三:参数的顺序不同 

C++入门之基础语法_第10张图片

C++是如何实现重载的 

C语言不支持重载的原因是:在链接这个阶段:使用函数名取寻找地址的,所以如果函数名相同,那么会区分不开。

C++:有一套函数名修饰规则,在名字中引入参数,那么就可以区分名字。 

 例如,下面两个同名函数

void f(int a,char b)
void f(char b,int a)

引入参数规则后:

call _Z1fic(?) //_Z1是默认的,f是函数名,ic是两个参数的类型的首字母缩写
call Z1fci(?)

 

你可能感兴趣的:(c++,c++,开发语言)