C++成长之路(11)——常用头文件及相应函数【持续更新ing】
2019-03-04 10:40
309 查看
头文件:iostream
- static_cast是一个强制类型转换操作符。
强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast、dynamic_cast、const_cast、reinterpert_cast四个。本节介绍static_cast操作符。
- 编译器隐式执行的任何类型转换都可以由static_cast来完成,比如int与float、double与char、enum与int之间的转换等。
[code]double a = 1.999; int b = static_cast<double>(a); //相当于a = b ;当编译器隐式执行类型转换时,大多数的编译器都会给出一个警告:
[code]e:\vs 2010 projects\static_cast\static_cast\static_cast.cpp(11): warning C4244: “初始化”: 从“double”转换到“int”,可能丢失数据使用static_cast可以明确告诉编译器,这种损失精度的转换是在知情的情况下进行的,也可以让阅读程序的其他程序员明确你转换的目的而不是由于疏忽。
把精度大的类型转换为精度小的类型,static_cast使用位截断进行处理。
- 使用static_cast可以找回存放在void*指针中的值。
[code] double a = 1.999; void * vptr = & a; double * dptr = static_cast<double*>(vptr); cout<<*dptr<<endl;//输出1.999static_cast也可以用在于基类与派生类指针或引用类型之间的转换。然而它不做运行时的检查,不如dynamic_cast安全。static_cast仅仅是依靠类型转换语句中提供的信息来进行转换,而dynamic_cast则会遍历整个类继承体系进行类型检查,因此dynamic_cast在执行效率上比static_cast要差一些。现在我们有父类与其派生类如下:
[code]class ANIMAL { public: ANIMAL():_type("ANIMAL"){}; virtual void OutPutname(){cout<<"ANIMAL";}; private: string _type ; }; class DOG:public ANIMAL { public: DOG():_name("大黄"),_type("DOG"){}; void OutPutname(){cout<<_name;}; void OutPuttype(){cout<<_type;}; private: string _name ; string _type ; };此时我们进行派生类与基类类型指针的转换:注意从下向上的转换是安全的,从上向下的转换不一定安全。
[code]int main() { //基类指针转为派生类指针,且该基类指针指向基类对象。 ANIMAL * ani1 = new ANIMAL ; DOG * dog1 = static_cast<DOG*>(ani1); //dog1->OutPuttype();//错误,在ANIMAL类型指针不能调用方法OutPutType();在运行时出现错误。 //基类指针转为派生类指针,且该基类指针指向派生类对象 ANIMAL * ani3 = new DOG; DOG* dog3 = static_cast<DOG*>(ani3); dog3->OutPutname(); //正确 //子类指针转为派生类指针 DOG *dog2= new DOG; ANIMAL *ani2 = static_cast<DOG*>(dog2); ani2->OutPutname(); //正确,结果输出为大黄 // system("pause"); }
- static_cast可以把任何类型的表达式转换成void类型。
- static_cast把任何类型的表达式转换成void类型。
- 另外,与const_cast相比,static_cast不能把换掉变量的const属性,也包括volitale或者__unaligned属性
头文件:iomanip
- 函数:setw()
- 功能:指定输出所占的列数;
- 举例:setw(5) << c << endl;
输出c表示的字符,如果输出数据项的长度不足5,则向右对齐;若超过5,则按实际长度输出
头文件:string
- 定义字符串变量时,如: string country = "CHINA"; 需包含此头文件。
- 若要求字符串的长度,则 length = country.length(); //取str的长度
- getline():输入整行字符串
例如:
getline(cin,s2);
输入字符串时,可以使用其他分隔符作为字符串结束的标志(例如逗号、分号),将分隔符作为getline的第3个参数即可。如:getline(cin,s2,‘,’);
[code]include <iostream> #include <string> using namespace std; int main() { for (int i = 0; i < 2; i++){ string city, state; getline(cin, city, ','); getline(cin, state); cout << "City:" << city << “ State:" << state << endl; } return 0; }
运行结果:
Beijing,China
City: Beijing State: China
San Francisco,the United States
City: San Francisco State: the United States
相关文章推荐
- C++中类型注册有的时候,函数找不到定义,可能是相应的头文件中防止重定义的声明,还是用原来的,没有做相应的更新
- Vertica的这些事<五>—— 关于vertica常用函数介绍(持续更新ing)
- 常用函数与相应的头文件(C++)
- c/c++常用头文件包含函数(转)
- ASP中最常用的22个FSO文件操作函数1-11
- C/C++常用头文件及函数汇总
- C/C++常用头文件及函数汇总
- 字符串常用函数汇总【持续更新中........】
- 总结js常用函数和常用技巧(持续更新)
- c/c++常用头文件及函数汇总
- C/C++语言 常用头文件函数
- 常用js函数收集(持续更新中----)
- C/C++常用头文件及函数汇总
- Android Studio 常用技巧(持续更新ing)
- C/C++常用头文件及函数汇总
- C++常用的文件操作路径函数
- Spring各个组件常用注解含义(持续更新ing)
- PHP常用的一些公共函数(持续更新)
- SQL2000 中常用的函数收集(持续更新)
- 工作笔记(五):常用jquery函数以及操作,持续更新..