C++基础知识(五)C++的一些特性
有人说,C++是由C语言往前走了一步而变成的,因为从语法角度上来看,C++就是在C的基础上自增了一。那么,C++和C语言相比,除了类(就是面向对象的那一套东西之外),基础语法增加的有哪些呢。
1、强制类型转换,C++中有四种强制类型转换,static_cast,const_cast,dynamic_cast,reinterpret_cast。
(1)static_cast是最常用的强制类型转换,他的作用是将一种基本类型的数据转换为另一种基本类型,比如从int型到float型。
int part = 90;
int full = 100;
float rate = static_cast<float>(part)/static_cast<float>(full);
(2)const_cast根据名字我们知道,它用来强制去掉常数性。更确切而说是将指向常数对象的指针转变为一个指向非常数对象的指针。
#include <iostream>
using namespace std;
const int* find(int val,const int* t,int n);
int main()
{
int a[] = {2,4,6};
int* ptr;
ptr = const_cast<int*>(find(4,a,3));
if(ptr==0)
{
cout<<"not found!"<<endl;
}
else
{
cout<<"find: "<<*ptr<<endl;
}
}
const int* find(int val,const int* t,int n)
{
for(int i=0;i<n;i++)
{
if(t[i]==val)
{
return &t[i];
}
}
return 0;
}
在上面的例子中,我们在一个数组中查找指定的元素是否存在。如果指定的元素存在的话,就以const int*为类型返回所查找的元素的地址。而我们在主函数中接收find这个函数的返回值的是一个int*类型的指针。如果直接使用
ptr = find(4,a,3);的话,编译器就会报错。在这里就需要强制类型转换ptr = const_cast<int *>find(4,a,3);,从安全的角度来讲,因为数组a的类型为int []类型,并没有用const来限定常数性,因此这个转换是安全的。
(3)reinterpret_cast用来改变指针类型。可以将一个整型转变为一个指针类型,也可以将一个指针类型转变为整型。
float f = -0.3333;
unsigned char* p = reinterpret_cast<unsigned char*>(&f);
将float类型的指针转变为unsigned char*类型的指针。
(4)dynamic_cast以后再介绍。
2、bool类型,我们都知道,在c语言中是没有bool类型的数据的。在c语言中,用0表示假,非0表示真。c++中新添了bool类型,true和false。当然c语言判断真假的那一套规则,在c++中也是可以使用的。
3、枚举类型,只需要记住一点,枚举类型的主要作用是用来声明常量的。
4、结构类型,c++中的结构类型和c语言中的结构类型有着很大的差别,尽管他们都是用关键字struct声明。
(1)在c语言中,结构体中只有数据成员,而没有函数成员。在c++的结构体中可以有函数成员。
(2)在c++中用结构体声明变量前,前面不用再冠以struct关键字。
(3)在c++中,关键字struct和类声明的关键字class可以等同。
5、c++中有string类型,而c中用字符数组来表示字符串。string类型比较常用的方法有c_str(),length(),erase(),insert(),replace(),substr(),find()。这些方法基本上都可以根据名字而猜出他们的作用。
就先介绍这么多吧。
C++基础知识(五)C++的一些特性相关推荐
- git 分支复制_Git基础知识(五)
Git基础知识(五) 分支 都说Git的分支是它的必杀技特性,由于没有接触过太多的版本管理工具,就使用过的SVN来说,两者真的差别巨大.SVN创建一个分支,需要将内容复制一遍!这个时间真的是非常的漫长 ...
- JavaSE基础知识(五)--面向对象代码实现初步(实现一个简单的类类型代码)
Java SE 是什么,包括哪些内容(五)? 本文内容参考自Java8标准 一.面向对象(代码实现): 首先,在这里我需要说明一个根本性的问题:实际上,面向对象编程包括了两部分,一个是你的编程思想,一 ...
- JAVA攻城狮:JAVA核心第11版 卷1基础知识,卷2高级特性+JAVA编思第4版(中)
<JAVA核心技术第11版卷1,2> Java核心技术与Thinking in Java(Java编程思想)齐名的 Core Java.2018年9月才出版的英文原版,包括了Java9,J ...
- C# 基础知识 (五).变量类型和字符串处理
这篇文章是阅读<C#入门经典(Beginning C#)>书籍里面的内容,作者Karli Watson.主要包括自己缺乏的一些C#基础知识和在线笔记使用,文章主要包括C#简 ...
- Java基础知识(五) 字符串与数组
Java基础知识 字符串与数组 1. 字符串的创建与存储的机制是什么 2. "==".equals和hashCode有什么区别 3. String.StringBuffer.Str ...
- 卷积神经网络基础知识五(mobilenet)
一.简单介绍 1.1 绪论 论文下载地址: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applicat ...
- Java并发基础知识(五)
线程池 为什么要用线程池? Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池.在开发过程中,合理地使用线程池能够带来3个好处. 第一:降低资源消耗.通过 ...
- JavaSE基础知识(五)--面向对象思想概述
Java SE 是什么,包括哪些内容(五)? 本文内容参考自Java8标准 一.面向对象: 1.回顾前面的博文("了解这个开头,更有利于了解对象以及面向对象的思想") 首先我们知道 ...
- java基础知识五、六、七、八
第五章 在较大的数之前先增加较小数是减小误差的一种方法. 第六章 方法签名(Method Signature)指方法名称.参数类型和参数数量.java编译器根据方法签名决定使用哪个方法. 调用方法时, ...
- 电子元器件基础知识:电感的结构和特性
电感器又称扼流器.电抗器.动态电抗器,是能够把电能转化为磁能而存储起来的元件.电感器的结构类似于变压器,但只有一个绕组.我们先来了解一下电感的结构和特性,且看以下讲解. 编辑 添加图片注释,不超过 ...
最新文章
- 程序、进程、线程的关系
- 是否患有新冠肺炎? 你咳嗽一声
- ASP.NET MVC Controller激活系统详解:默认实现
- 从零开始学习docker(九)持久化存储和数据共享之 Data Volume
- kali装电脑_Kali Linux可以安装到平板电脑吗?
- .NetCore下使用Polly结合IHttpClientFactory实现聚合服务
- 新经济、新选择——人才流动与迁徙2021
- 大数据学习笔记56:HBase Shell操作
- php 生成器 封装,php生成器
- 修改Docker镜像的默认存储位置
- 新手先学java还是python_2018年,初学者学Java还是Python?统计数据给你答案
- PySpark-Recipes : I/O操作(txt, json, hdfs, csv...)
- Android免root流量防火墙,简单小程序
- github Desktop工具桌面版汉化教程
- Rider 使用Emmylua 代码提示
- linux下云翔php,《云翔曲谱》目录
- BTA12A-ASEMI高效mos管BTA12A
- 咪咕音乐的下载音乐存储路径(MAC)
- 自己开发的j2ee Web快速开发平台简介
- HIT 2019春软件构造Lab1