2024年C C++最全C++入门·开篇_c++开头,2024年最新大厂C C++高级面试题汇总解答

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

文章目录

写在前面

开始入坑C++了,嗐,说实话细节有好多,怎么说呢,我相信,今天是灰色的,明天是灰色的,后天一定是美好的,加油吧少年们。
在这里插入图片描述

一、C++关键字

C++有63个关键字,而C语言只有32个关键字。

asmdoifreturntrycontinue
autodoubleinlineshorttypedeffor
booldynamic_castintsignedtypeidpublic
breakelselongsizeoftypenamethrow
caseenummutablestaticunionwchar_t
catchexplicitnamespacestatic_castunsigneddefualt
charexportnewstructusingfriend
classexternoperatorswitchvirtualregister
constfalseprivatetemplatevoidtrue
const_castfloatprotectedthisvolatilewhile
deletegotoreinterpret_cast

这里的话就不详细介绍了,后面会详细讲解。


二、命名空间

在C++中,变量、函数和类型都是大量存在的。如果全部存在于全局作用域中,可能会导致许多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突和名字污染,namespace关键字的出现就是针对这种问题的。

例题:

#include<stdio.h>

int rand = 0;

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

上面的代码是没有问题的,但是加上这个头文件之后程序就挂了。

#include<stdio.h>
#include<stdlib.h>

int rand = 0;

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ws5dZTJv-1652085076490)(C:\Users\macbook\AppData\Roaming\Typora\typora-user-images\image-20220430205402762.png)]

rand()是一个库函数存在于stdlib.h头文件中,而在编译的时候头文件会展开,这时候变量rand和库函数rand都存在与同一个作用域中(全局作用域)

从上面的错误示范中可以得到,同一个作用域里面不可以出现同名变量,因为会导致命名冲突,在C语言中没有很好地解决这个问题,但在C++中引入namespace来解决它,在命名空间中定义变量,函数,类型均可。

那怎么改才是对的呢?

#include<stdio.h>
#include<stdlib.h>

namespace SL//命名空间域
{
    int rand = 0;
}

int main()
{
    printf("%d\n", SL::rand);//::域作用域限定符,如果左边是空白,则默认是全局作用域中的rand
    return 0;
}

1.命名空间的定义

定义命名空间,需要使用namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

普通命名空间的定义

 namespace SL//SL为命名空间的名称
 {
     //命名空间中的内容,即可以定义变量、函数、还可以定义类型
     int a = 0;
     int Add(int x, int y)
     {
         return x + y;
     }
     struct Node
     {
     	int val;
         struct Node\* next;
     };
 }
 

命名空间支持嵌套和重名

   namespace byte
   {
       int a = 0;
       namespace data//命名空间可以嵌套,一般多是2~3层
       {
           struct Node
           {
             	int val;
               struct Node\* next;
           };
       }
   }

   //在同一工程中允许存在多个相同名称的命名空间,编译器最后会合并在同一个命名空间中
   namespace byte
   {
       int b = 0;
       namespace cache
       {
           struct Node
           {
               int val;
               struct Node\* next;
           }
       }
   }

注意:

定义一个命名空间就相当于定义了一个新的作用域,命名空间中的内容都局限于该命名空间中;

命名空间不会影响变量的生命周期,而且命名空间的定义只能是全局的,不能在局部中定义,比如在main函数中定义就是错误的,而且一般命名空间是定义在头文件下的。

总结:

  • 命名空间中的内容:可以定义变量、函数,还可以定义类型;
  • 命名空间支持嵌套(防止工程太大导致命名冲突);
  • 同名的命名空间是允许同时存在的,编译器编译时会自动合并。

2.命名空间的使用

//意思是把byte这个命名空间中的内容放出来
using namespace byte;

//这两行代码的意思是先展开byte,再展开data,如果颠倒顺序是错误的,而且意义不等同于using namespace byte::data;
using namespace data;

//注意哦,这里展开的是byte中的cache,并没有将byte展开
using namespace byte::cache;

using的意义:将命名空间中的内容全部或部分放出来。

using namespace byte;//全部放出来

using namespace byte::a;//部分放出来

命名空间的三种使用方式:

  • 加命名空间名称及作用域限定符
std::cout << byte::a << std::endl;

  • 使用using将命名空间中成员引入(通常用来放部分常用的)
using std::cout;
using std::endl;
using byte::a;
	cout << a << endl;
	cout << byte::b << endl;

  • 使用using namespace命名空间引入(放了全部)
using namespace byte;
using namespace std;
//std是C++标准库的命名空间,全部放出来虽然方便使用了,但是存在冲突风险,所以我们平时在写一些练习不在乎冲突的时候,可以将它全部放出来,正常情况下没必要全部放出来


三、C++输入&输出

下面看看C++是如何向世界打招呼的:

#include<iostream>
using std::cout;
using std::endl;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

说明:

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

return 0;

}


说明:




[外链图片转存中...(img-CVZwJWcO-1715523517157)]
[外链图片转存中...(img-1aOTnK3m-1715523517157)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值