从 C到 C++(一)

一、C++对C的扩展

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

关于cin cout endl定义和使用

cin cout endl这些对象都是由C++提供定义的,我们在使用时,只需要将定义和声明
部分引用到自己工程即可。
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;是可选的

2.C++字符串类型(string)

C++类型分为内置类型(C语言的类型,比如:int double)和类类型(使用关键字class定义的类型)

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

char* --- char char a[10]

string --- 字符串类型 ,string它是声明在命名空间std,所以要使用字符串,
要包括std和 #include <iostream>
    //就将它看作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;
    }
    //以上是对字符串的基本操作,还以其他的操作:查找,删除,这些操作,
    放在STL模板库中去使用

现场代码案例:

录入和输出一个学生信息,录入和输出都采用函数来进行封装

struct student
{
  int age;
  char sex;
  //char name[20];   strcpy
 // char* name; strcpy
 string name;
};
补充:笔试题
void func(int a[100]) //数组作为函数形参,会自动退化为指针
{
    sizeof(a) = ? //32 --- 4

}
//void logging_data(struct student p) //可以,但是,效率不高,不推荐使用
void logging_data(struct student* p) //结构做为形参,通常用指针,为了保证数据的传输效率
{
   cout << "请录入学生名字:";
   cin >> p->name;
   cout << endl;
   cout << "请录入学生年龄:";
   cin >> p->age;
   cout << endl;
   cout << "请录入学生性别:";
   cin >> p->sex;
   cout << endl;
}

void print_data( struct student* p)
{
    cout << "学生的信息如下:"<<endl;
    cout << p->name << endl;
    cout << p->age << endl;
    cout << p->sex << endl;
}

3. C++布尔类型(bool)

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

true ---- 1

flase ---- 0

bool isok = true;

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

4. C++枚举类型(enum)

C++ 枚举在使用上跟C语言中完全一样,不同的是,它才是真正意义上枚举类型,而C语言中的枚举类型本质上是一个整型常量。如下所示:

 //定义一个游戏操作枚举类型
enum play{
    LEFT, //LEFT = 0
    RIGHT, //1
    UP, //2
    DOWN //3
};
    //C++ 枚举才是真正的枚举类型,不是整型常量
    // cannot initialize a variable of type 'enum play' with an 
    //rvalue of type 'int'
    //enum play op = 2; c语言是OK
    //C++中,要使用定义的常量给一个
    enum play op = DOWN;
    cout << op << endl;

5. C++命名空间(namespace)

1).命名空间引入分析

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

//模块一
int i;
//模块二
int i;

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

2).命名空间(namespace)使用

基本语法:

namespace 命名空间名字
{
       
}

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

namespace model1
{
    int i;//当前变量i只对命名空间model1可见,它的作用域被限定在model1
    int j;
}

namesapce model2
{
    int i;//当前变量i只对命名空间model2可见,它的作用域被限定在model2
}

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

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

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

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

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

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

比如:using spaceA::a;

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

比如: using namespace spaceA;

3)命名空间嵌套

namespace 命名空间1
{
       int a;
       namespace 命名空间2
      {
                int a;
      }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值