1、面向对象-C到C++

本文介绍了C++编程中的基本概念,包括命名空间的使用解决命名冲突、C++标准库与std命名空间的区别、语言实用性的加强(如变量定义位置和register关键字)、类型要求严格化以及bool类型和三目运算符的更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、一个简单的C++程序

  1 #include <iostream>  //包含头文件  输入输出流流
  2 
  3 using namespace std;     //使用标准命名空间
  4 
  5 int main()
  6 {
  7     cout << "helloworld" << endl;   //cout 标准输出流对象 <<输出运算符 endl换行
  8     
  9     return 0;
 10 }

编译:

 二、命名空间

1、为什么要引入命名空间

为了解决合作开发时的命名冲突问题,C++ 引入了命名空间(Namespace)的概念。
命名空间将全局作用域分成不同的部分
不同命名空间中的标识符可以同名而不会发生冲突
命名空间可以相互嵌套
全局作用域也叫默认命名空间

2、命名空间的使用

①命名空间的定义

 /**
namespace 是C++中的关键字,用来定义一个命名空间,语法格式为:
namespace name
{
    变量
    函数
    类
}
name是命名空间的名字,它里面可以包含变量、函数、类、typedef、#define 等,最后由{ }包围 
**/

②命名空间的使用(作用域限定符  >  using)

::是一个新符号,称为域解析操作符,在C++中用来指明要使用的命名空间

 24 int main()
 25 {
 26     //std::cout << a << std::endl;  a不是全局变量,也不是main局部变量 所以未定义
 27     std::cout << A::a <<std::endl;
 28 
 29     return 0;
 30 }

使用using声明(只能声明一次)

 24 int main()
 25 {
 26     //std::cout << a << std::endl;  a不是全局变量,也不是main局部变量 所以维定义
 27     //std::cout << A::a <<std::endl;
 28 
 29     using namespace B;           //使用命名空间B   (自此行起,调用的变量和函数都是B空间的内容)
 30     std::cout << a << std::endl;
 31 
 32     print();
 33     
 34     return 0;
 35 }

3、C++标准库和std命名空间

1) 旧的 C++ 头文件,如 iostream.h、fstream.h 等将会继续被支持,尽管它们不在官方标准中。这些头文件的内容不在命名空间 std 中。
 
2) 新的 C++ 头文件,如 iostream、fstream 等包含的基本功能和对应的旧版头文件相似,但头文件的内容在命名空间 std 中。
注意:在标准化的过程中,库中有些部分的细节被修改了,所以旧的头文件和新的头文件不一定完全对应。
3) 标准C头文件如 stdio.h、stdlib.h 等继续被支持。头文件的内容不在 std 中。
 
4) 具有C库功能的新C++头文件具有如 cstdio、cstdlib 这样的名字。它们提供的内容和相应的旧的C头文件相同,只是内容在 std 中。
 
可以发现,对于不带.h的头文件,所有的符号都位于命名空间 std 中,使用时需要声明命名空间 std;对于带.h的头文件,没有使用任何命名空间,所有符号都位于全局作用域。这也是 C++ 标准所规定的。
 

三、c++和c一些改变

1、实用性加强

①C语言中的变量都必须在作用域开始的位置定义!!

②C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。

2、register关键字的变化

 C语言中无法取得register变量地址

在C++中依然支持register关键字
             1、C++编译器有自己的优化方式,不使用register也可能做优化
             2、C++中可以取得register变量的地址
C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效

  1 #include <iostream>
  2 
  3 int main()
  4 {
  5     register int i = 0;      //声明寄存器变量 不能取地址
  6 
  7     for(i = 0;i < 1000;i++);
  8 
  9     &i;    //对寄存器变量取地址 register关键字变得无效
 10     std::cout << &i << std::endl;
 11 
 12     return 0;
 13 }

3、变量检测加强

在C语言中重复定义多个全局变量是合法的
这些同名的全局变量最终都会被链接全局数据区的同一个地址空间上

在C++中不允许定义多个同名的全局变量

4、struct类型加强

  1 #include <stdio.h>
  2 
  3 struct Test
  4 {
  5     int a;
  6 };
  7 
  8 int main()
  9 {   
 10     struct Teat t;
 11     //Test t2;       c语言此方式定义出错   c++支持       
 12     
 13     return 0;
 14 }

5、C++中所有变量和函数都必须要有类型

  1 #include <stdio.h>
  2 
  3 f1()       //c语言可以这样 c++所有的函数都要有返回值
  4 {
  5     return 0;
  6 }
  7 
  8 void f2()       //c语言可以表示接受任意类型的参数
  9 {
 10 }
 11 
 12 int main()
 13 {   
 14     f1();
 15     f2(1,2);       //c语言可以    c++不可以
 16     
 17     return 0;
 18 }

6、新增bool类型关键字

  1 #include <iostream>
  2 
  3 using namespace std;
  4 
  5 int main()
  6 {   
  7     bool a = true;
  8     bool b = false;
  9     
 10     cout << a << endl;      //bool 只能是1或0    非0为真
 11     cout << b << endl;
 12     
 13     return 0;
 14 }

7、三目运算符的增强

  1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5     int a = 0,b = 2;
  6 
  7     int num = (a > b) ? a : b = 100;   //c语言中返回的是具体的数值 (2 = 100) c++中返回的是变量名(b = 100)
  8     printf("%d\n",num);
  9 
 10     return 0;
 11 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值