C++基础知识(五)C++的一些特性
2013-10-25 13:25
267 查看
有人说,C++是由C语言往前走了一步而变成的,因为从语法角度上来看,C++就是在C的基础上自增了一。那么,C++和C语言相比,除了类(就是面向对象的那一套东西之外),基础语法增加的有哪些呢。
1、强制类型转换,C++中有四种强制类型转换,static_cast,const_cast,dynamic_cast,reinterpret_cast。
(1)static_cast是最常用的强制类型转换,他的作用是将一种基本类型的数据转换为另一种基本类型,比如从int型到float型。
(2)const_cast根据名字我们知道,它用来强制去掉常数性。更确切而说是将指向常数对象的指针转变为一个指向非常数对象的指针。
在上面的例子中,我们在一个数组中查找指定的元素是否存在。如果指定的元素存在的话,就以const int*为类型返回所查找的元素的地址。而我们在主函数中接收find这个函数的返回值的是一个int*类型的指针。如果直接使用
ptr = find(4,a,3);的话,编译器就会报错。在这里就需要强制类型转换ptr = const_cast<int *>find(4,a,3);,从安全的角度来讲,因为数组a的类型为int []类型,并没有用const来限定常数性,因此这个转换是安全的。
(3)reinterpret_cast用来改变指针类型。可以将一个整型转变为一个指针类型,也可以将一个指针类型转变为整型。
将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()。这些方法基本上都可以根据名字而猜出他们的作用。
就先介绍这么多吧。
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++中的一些基础知识
- 对C++中关联容器一些基础知识的认识
- 【基础知识】c++字符串中需要注意的一些细节
- C++的一些基础知识
- 有关C/C++的一些基础知识
- c/c++中的一些基础但必须熟记的知识
- C++一些基础知识
- java 基础知识1-和c++的一些区别
- 关于笔试题中C++的一些基础知识
- C++的一些基础知识,对面试大有裨益
- C++笔记(3):一些C++的基础知识点
- java 基础知识1-和c++的一些区别
- c/c++中的一些基础但必须熟记的知识
- 自己总结C/C++的一些容易被遗忘的基础知识!
- Java与C/C++不同的一些基础知识点
- c++的一些容易混淆基础知识点
- 复习C++一些基础知识
- Java入门--一些JAVA相关的基础知识
- 整理出来的一些Android基础知识
- HTML5的新特性--基础知识(1)