C++入门

C++入门

一、C++关键字

在C++98标准下,有63个关键字,到C++11已经有80多个关键字了。其中也包含C的32个。

在这里插入图片描述

二、命名空间

使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字 污染,namespace关键字的出现就是针对这种问题的。

1.命名空间的定义

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

namespace ant
{
    int a;
    int b;
}
那么为什么要使用namespace去定义一个命名空间呢?

主要是为了解决C语言命名冲突的问题

如:

//在C中
int main()
{
    int scanf = 10;
    int strlen = 20;
    //scanf和strlen不是关键字,是库函数名称,所以可以用其定义变量
}

看上面程序我们定义了与函数名重名的变量,这样我们在使用scanf函数和strlen函数就会出现问题。

因为编译器在辨别scanfstrlen采用的是就近原则,先从局部域开始找,这样编译器就以为其是我们定义的变量。

这样就会发生命名冲突

但这样的问题在C++中就迎刃而解

C++用命名空间,将不同域的相同名字的变量进行隔离。

如:

namespace ant
{
    int scanf = 10;
    int strlen = 20;
}
int main()
{
    printf("%x\n",ant::scanf);
    printf("%x\n",ant::strlen);
    //指定访问ant命名空间的scanf和strlen,这样和库函数中的scanf和strlen就不冲突了
    
    //当然没有指定,默认访问的局部或全局
    printf("%x\n",::scanf);
    //这样前面是空白又是什么意思呢,它代表访问全局的scanf,::这个符号表示访问左边指定的域的数据。
}
2.命名空间的嵌套使用

命名空间当然也可嵌套使用,如:两个公司合作,公司下面有不同的部门,我们要合并两个工程时,就需要每个公司每个部门的数据,这样先写两个空间分别代表两个公司,其中再嵌套不同部门即可。

如:

namespace ant
{
    int a=10;
    namespace a
    {
        int b = 20;
    }
}

//那么嵌套的命名空间该如何访问呢?
int main()
{
    printf("ant::a::b");
    //还是一样,只是需要多写一层
}
3.命名空间中还可以定义函数

如:

namespace ant
{
    int Add(int a,int b)
    {
        return a+b;
    }
}

int main(void)
{
    int a = 10,b = 20;
    int c = ant::Add(a,b);
    //调用时一样需要加上ant::。
}
总:

对于命名空间,不同的命名空间,就相当于不同的域,其中可以定义结构体函数等其他东西。这样就可以很好的解决重名的问题,更好的进行开发。

注:同一个工程中允许存在多个相同的命名空间,编译器最后会合成同一个命名空间

4.using namespace std的作用

因为C++库为了防止命名冲突,把自己库里面的东西都定义在一个std的命名空间中。所以如果我们要使用cout,endl等函数时,就需要引入std命名空间。

那么怎么引入std命名空间呢

  1. 指定命名空间:

    如:

    int main()
    {
        std::cout << a << std::endl;
    }
    

    这样的命名比较标准,是最规范的方式。

    缺陷:麻烦,并且每个地方都要指定。

  2. std整个展开

    using namespace std;
    //这就是我们平常最常用的方法
    

    看起来方便了,适合平常使用,但不适合工程使用。

    缺陷:如果我们自己定义的东西跟库冲突就没办法解决。

  3. 对部分常用的库里面的东西展开

    using std::cout;
    using std::endl;
    //要用什么就展开什么,针对前两种方法,项目中也会经常使用
    //但要注意,只能一行一行引入。
    
    总:

    自己定义的也可用以上三种方法,其他标准库的东西都可以用以上三种方法

5.关于引入头文件的使用

C++的头文件都不用带.h,这是为什么呢?

  1. 跟老的C++编译器和C进行区分。

三、C++输入和输出

C++的输入为cin,而输出为cout。那就有人要问了,那endl是干嘛的,它相当于一个全局的换行符。

对比C语言,cin对比scanfcout对比printfendl对比\n

那么就有人要说了,C++不是兼容C么,为啥不用之前的,两个有什么区别呢?

当然有区别了,coutcin自动识别类型

如:

int main()
{
    int a = 10;
    printf("%d",a);//printf打印a需要前面加格式化输出符号。
    cout << a << endl;//C++只需写上它即可。
}

那么为什么不用printfscanf呢。当然要用呢,可以混用,哪个好用用哪个。

注:cin有着和scanf一样的缺点,无法读取空格

四、缺省参数

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

如:

void Test(int a = 0)
{
    cout << a << endl;
}

int main()
{
    Test();//没有传参时,使用参数的默认值
    Test(10);//传参时,使用指定的实参
}
1.缺省参数分类
  • 全缺省参数

    void Test1(int a = 0,int b = 1,int c = 2)
    {
       //这样里面所有参数都是缺省参数的,即为全缺省参数
    }
    
    void Test2(int a,int b = 0, int c = 1)
    {
        //这种里面有没有缺省参数的,即为半缺省参数
    }
    
2.缺省参数的应用

比如:栈的初始化时,我们需要栈的空间不一样,增容需要代价,太大又浪费空间,这时用缺省参数,即可控制其需要大小

注:
  1. 半缺省参数必须从右往左依次来给出,不能间隔着给
  2. 缺省参数不能在函数声明和定义中同时出现。因为当声明或定义时的默认值不同时,编译器就无法确定到底该用哪个缺省值。
  3. 缺省值必须是常量或者全局变量

五、函数重载

是函数的一种特殊情况,C++允许在同一作用域中声明几个功能类似的同名函数,这些同名函数的 形参列表(参数个数 或 类型 或 顺序)必须不同,常用来处理实现功能类似数据类型不同的问题。

1.函数重载的应用

常处理功能类似数据类型不同的函数

如:

int Add(int a,int b)
{
    return a+b;
}
double Add(double a,double b)
{
    return a+b;
}

这样我们调用Add时,就不用担心其时整型还是浮点型了,因为编译器会自己选择调整。

2.函数重载的问题

如:

void test(int a,int b,int c = 1)
{
    .......
}
void test(int a,int b)
{
    
}
//这两个函数虽然构成函数重载。
//但f(1,2)这样两个函数的调用会出现问题,因为编译器不知道使用哪个。所以在使用函数重载时,要注意这方面的问题。




  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Dev-C++是一款流行的集成开发环境(IDE),用于C和C++编程。下面是Dev-C++入门教程: 1. 下载和安装:首先,你需要从Dev-C++官方网站下载并安装最新版本的Dev-C++。安装过程相对较简单,按照提示进行操作即可。 2. 创建新项目:打开Dev-C++后,点击菜单栏上的"File",然后选择"New"来创建一个新项目。在弹出的窗口中,选择"C++ Project"或"C Project",并为项目命名。 3. 编写代码:在项目中的源文件上右键点击并选择"Add new",然后选择"C++ Source"或"C Source"。在弹出的代码编辑器中,你可以编写C或C++代码。 4. 编译和运行:点击菜单栏上的"Execute",然后选择"Compile & Run"来编译和运行你的代码。如果一切顺利,你将在输出窗口中看到"Hello world"的输出。 注意:在编写代码时,你可以使用C++的输出流对象cout来输出文本。在Dev-C++的代码示例中,你会看到类似于"cout<<"Hello world";"这样的代码段。这是C++中一种常用的输出语法。 这就是Dev-C++入门教学。希望对你有所帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Dev-c++入门教程1(模板及使用)](https://blog.csdn.net/zzz209/article/details/109955745)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值