标准C++名字空间、结构、联合、枚举和布尔类型

C++介绍

本贾尼.斯特劳斯特鲁普,于1979年4月由贝尔实验室的本贾尼博士在分析UNIX 系统分布内核流量分析时,希望有一种有效的更加模块化的工具。在1979年10月完成了预处理器Cpre,为C增加了类机制,也就是面向对象,1983年完成了C++的第一个版本,C with classes 也就是C++。

C++与C的不同点:

1、C++完全兼容C的所有语法
2、支持面向对象的编程思想
3、支持运算符、函数重载
4、支持泛型编程、模板
5、支持异常处理
6、类型检查严格

第一个C++程序

1、文件扩展名

.cpp	.cc	.C	.cxx

2、编译器

g++大多数系统需要额外安装,Ubuntu系统下的安装命令:
	sudo apt-get update
	sudo apt-get install g++

3、头文件

#include <iostream>
#include <stdio.h>可以继续使用
#include<cstdio>也可以使用

4、输入/输出

cin >> 输入数据
cout << 输出数据
cout/cin会自动识别类型
scanf/printf可以继续使用
注意:cout/cin是标准库类对象,而scanf/printf是标准库函数

5、增加了名字空间

std::cout
using namespace std;
所有的标准类型、对象、函数都位于std名字空间中

名字空间

1、为什么需要名字空间
在项目中函数名、全局变量、结构、联合、枚举、类,非常有可能名字冲突,而名字空间就对这些命名进行逻辑空间划分(不是物理空间划分),为了解决命名冲突。
2、什么是名字空间
在C++当中经常使用多个独立开发的库来完成项目,由于库的作者或开发人员根本没见过面,因此命名冲突在所难免,C++之父为防止名字冲突给C++设计一个名字空间的机制。通过使用namespace XXX 把库中的变量、函数、类、结构等包含在名字空间中,形成自己的作用域,避免了名字冲突。

namespace XXX
{

}	// 没有分号
注意:名字空间也是一种标识符,在同一作用域下不能重名。

3、同名的名字空间可以自动合并(为了声明和定义可以分开写)
同名的名字空间中如果有重名的依然会命名冲突
4、名字空间的使用方法
::域限定符
空间名::标识符 // 使用麻烦,但是非常安全
using namespace 空间名;把空间中定义的标识符导入到当前代码中。
5、无名名字空间
不属于任何名字空间中的标识符,隶属于无名名字空间。
无名名字空间中的成员使用 ::标识符 进行访问。
如果访问被屏蔽的全局变量 ::标识符。
6、名字空间的嵌套
名字空间内部可以再定义名字空间,这种叫名字空间嵌套。
内层的名字空间与外层的名字空间的成员可以重名,内层会屏蔽外层的同名标识符。
多层名字空间再使用时逐层分解。

n1::n2::n3::num
namespace n1
{
	namespace n2
	{
		namespace n3
		{
	
		}
	}
}

7、可以给名字空间取别名
由于名字空间可以嵌套,这样就会导致在使用内层成员时过于麻烦,可以给名字空间取别名来解决这类问题。
namespace n123 = n1::n2::n3;

C++的结构

  • 不再需要typedef,在定义结构变量时可以省略struct关键字
  • 成员可以是函数(成员函数),在成员函数中可以直接访问成员变量,不需要.或->,但是C的结构成员可以是函数指针
  • 有一些隐藏的成员函数:构造函数、析构函数、拷贝构造和赋值构造函数
  • 可以继承,可以设置成员的访问权限(面向对象)

C++的联合

  • 不再需要typedef,在定义结构变量时可以省略struct关键字
  • 成员可以是函数(成员函数),在成员函数中可以直接访问成员变量,不需要.或->,但是C的结构成员可以是函数指针
  • 有一些隐藏的成员函数:构造函数、析构函数、拷贝构造和赋值构造函数

C++的枚举

  • 定义、使用方法与C语言中基本一致
  • 但是类型检查比C语言更严格

C++的布尔类型

  • C++中具有真正的布尔类型,bool是C++的关键字,在C语言中使用布尔类型需要导入头文件stdbool.h(在C11中bool应该是数据类型)
  • C++中true false是关键字,而在C语言中不是
  • 在C++中true false是1字节,而在C语言中是4字节

C++的void*

1、C语言中void* 可以与任意类型的指针,自动转换
2、 C++中void* 不能给其他类型的指针直接赋值,必须强制类型转换但是其他类型的指针可以自动给void* 赋值.
3、C++为什么这样修改void*?

为了更安全,所以C++类型检查更严格
C++可以自动识别类型,对万能指针的需求不再那么强烈

操作符别名

某些特殊语言的键盘上没有~,&符号,所以C++标准委员会为了让C++支持更广泛,为这些特殊符号定义了一些别名,让这些小语种也可以愉快的编写C++代码.

and		&&
or		||
not		!
{		<%
}		%>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值