C++入门之基础语法

发布时间:2024年01月22日

目录

一.关键字

二.命名空间

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语言里,如果出现定义两个名字相同的变量,或者定义一个和关键字相同的变量那么就会出现命名冲突。如:自己定义了一个变量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<iostream>

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"<<endl;
        }
       
    }
    namespace ls
    {
        void push()
        {
            count<<"ls"<<endl;
        }
            
    }
}

int main()
{
    bit::pyf::push();
    bit::ls::push();
}

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

三. 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"<<endl

3.3 流提取cin>>??

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

4.1 全缺省

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

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

?

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

?不允许跳跃,如

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

?

4.3 缺省的应用场景?

一.?

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

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

?

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

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

?

五.函数的重载?

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

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

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

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

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

?

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

C++是如何实现重载的?

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

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

?例如,下面两个同名函数

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

引入参数规则后:

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

?

文章来源:https://blog.csdn.net/qq_62830324/article/details/135730070
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。