您的位置:首页 > 编程语言 > C语言/C++

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型。

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()。这些方法基本上都可以根据名字而猜出他们的作用。

就先介绍这么多吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: