C++学习(二)----从C语言到C++(1)

前篇回顾:

          初次使用Qt creator 工具时,编码的中文乱码现象,

---------->解决办法:在“项目” ---->选择“select  encodeing”  ------>在弹出的对话框中选择正确的中文编码(如:G818030 、UTF-8)

一、C++对C语言的扩展

1、C++的输入输出(cin,cout)

        (1) cin 和 cout 的定义由来    ------ (相当于C语言中的scanf()、printf()函数)

   cin、 cout、 endl这些对象都是由C++提供定义的,我们在使用时,只需要将定义和声明部分引用到自己工程即可。

        比如: #include <iostream>

                using namespace std;

              //  extern ---- 外部声明,它告诉编译器,这个变量是在其他地方定义,这个地方告诉编译 器是一个外部声明

                extern istream cin;         // Linked to standard input

                extern ostream cout;         //  Linked to standard output

         它们被定义在std命名空间中:

         namespace std

        {

         extern istream cin;

        extern ostream cout;

        }

        std及istream和ostream他们都间接引入#include <iostream> ,所以在使用时,必须要包含该文件中,对于using namespace std;是可选的。

        总的来说,使用 cin(输入)、cout(输出)-------- 需要引用头文件: #include <iostream> 

                        -------- 需要引入 std命名空间, 比如:using namespace std;

                        // 即 打开了std里面的所有定义,随意取用

二、C++字符串类型(string)

1、C++的类型

        C++类型分为内置类型(C语言的类型,比如:int double)、

                             类类型(使用关键字class定义的类型)。

        在C++中提供了一个类类型string,该数据类型主要用来处理字符串操作,可以替代C语言中char数组和字符指针(char*)。

2 、string ------> 字符串类型

       string  :是声明在命名空间std,

所以要使用字符串, 同样的要包括 std 命名空间 和 #include <iostream> 头文件。

    #include <iostream>
    using namespace std;

    //就将它看作int类型一样
    string s1;  //声明字符串类型变量
    s1 = "hello"; //给字符串变量赋值

    string s2 = "world"; //声明并且赋值

    cout << "s1 = " << s1 << endl;
    cout << "s2 = " << s2 << endl;
    string s3 = s1; //使用变量去给另一变量初始化 strcpy

    string s4 = s1 + s2; //两个字符串相加,得到 一个新的字符串,相当于字符串拼接
    cout << "s4 = " << s4;

    if(s1 == s3) //判断两个字符串是否相等
    {
        cout << "s1 和 s3两者相等"<<endl;
    }

      

三、C++布尔类型(bool)

1、布尔类型(bool)是C++中新增的一种基本数据类型。

        类似于C中的基本数据类型(比如:int)。该类型的值只有两种情况:true和flase,如果需要使用bool类型,直接使用即可。

        true ---- 1

        flase ---- 0

对于值的含义跟C语言保持一致,零为假,非零即真,但是值仍为1

四、C++枚举类型(enum)

1、枚举类型的定义

enum<类型名>{枚举常量表}
typedef enum<类型名>{枚举常量表}类型别名;
enum<类型名>{枚举常量表} 枚举变量名;
//有时甚至可以省略类型名
enum {枚举常量表} 枚举变量名;
 

        C++ 枚举在使用上跟C语言中完全一样,不同的是,它才是真正意义上枚举类型,

而C语言中的枚举类型本质上是一个整型常量。如下所示:

#include <iostream>


using namespace std;


//C++中的枚举被认为是一种真正数据类型,而非整型常量

enum GAME
{
    LEFT, //从零开始,依次加1
    RIGHT,
    UP=100,
    DOWN
};


int main()
{
    //main.cpp:17:16: error: cannot initialize a variable of type 'enum GAME' with an rvalue of type 'int'
    // enum GAME g1 = 0;
    //C++中枚举只能使用定义好的类型的值
    enum GAME g1 = LEFT;


    cout << g1 =  << g1 << endl; //0
    g1 = GAME::RIGHT; //:: ---- 代表着作用域解析符,解析右边是在那里定义
    cout << g1 =  << g1 << endl;//1
    g1 = GAME::DOWN;
    cout << g1 =  << g1 << endl; //101
    return 0;
}

        枚举类型,在没有定义值时,默认从 0 开始,依次加 1 ;

注意:

        不能直接给枚举变量赋整数型初始值;
        枚举变量能直接输出 不能直接输入
        不同类型的枚举变量不能相互赋值

五、C++命名空间(namespace)

1、命名空间引入分析

        在实际的系统开发中,所有的开发工作,通常都不会仅由一个人来开发完成,不同的人只负责自己功能模块,他们在设计时,比如声明变量,通常情况下,不会考虑其他人是否已使用该变量名,在模块功能测试时,相互之间是独立的,完全没有问题,当系统功能合成 时,不可避免地会出现变量或函数的命名冲突,因为变量或函数重名而导致的问题将会造成一定的混乱。例如:

        // 模块1

        int i;

        //模块2

        int i;

目的是为了解决命名冲突,引入歧义。

2、命名空间(namespace)使用

        命名空间目的是给一个变量或者函数一个限制的作用域,从而解决命名冲突

基本语法:

        namespace 命名空间名字

        {

        }

注意事项:在定义命名空间时,结束不要加分号!!!

        

/*由于使用命名空间后,变量的作用域被限定,所以在使用变量时,就需要通过特定方式来完成。需要用到“::”操作符,“::”操作符是域解析操作符。
例如: */

model1::i = 1;
model2::i = 2;

//除了直接使用域解析操作符,还可以采用using声明(using declaration),
//例如:

using model1::i;
i= 0;  //使用model1定义的变量i
model2::i= 10;  //使用model2定义的变量i

 // using声明不仅仅可以针对命名空间中的一个变量,也可以用于声明整个命名空间,
//例如:

using namespace  model1;
i= 0;  //使用model1定义的变量i
j = 20;
model2::i= 10;  //使用model2定义的变量i

3、命名空间成员使用方法总结:

        方法一 :命名空间名::成员 比如:spaceA::a;

使用using 可以使得命名空间中的成员暴露外部 ,以致可以使用该成员

        方法二: using 命名空间名::成员 ----> 把指定的成员暴露给外部

比如:using spaceA::a;

        方法三: using namespace 命名空间名 ---> 将其所有成员暴露给外部

比如: using namespace spaceA;

4、命名空间嵌套

namespace 命名空间1

{

        int a;

        namespace 命名空间2

        {

                int a;

        }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值