C++笔记 类型转换,IO,STL标准模板库
来源:互联网 发布:电脑软件助手 编辑:程序博客网 时间:2024/06/07 08:50
1 C++ 类型转换
首先引入#include <iostream>
自动转换
void main(){ int i = 0; double d = 3.4; i = d; //double自动转换为int类型 cout << i << endl; //打印结果 3 system("pause");}
使用 static_cast
void main(){ int i = 8; double d = 5.6; i = static_cast<int>(d); cout << i << endl; //打印结果 5 system("pause");}
void* ->char* 类型转换
void* func(){ int i = 9; return &i;}
void main(){ char *c_p = (char*)func1(2); //void* ->char* //char *c_p = static_cast<char*>(func()); //与上面的这一行结果相同 cout << *c_p << endl; //打印结果 X system("pause");}
void* ->const_cast 去常量
void func(const char c[]){ //c[1] = 'a'; 此行代码将会报错 c不可以修改 //char * c_p = (char*)c;//通过指针间接赋值 和下面的const_cast方式结果相同 //c_p[1] = 'x'; //提高了可读性 char* c_p = const_cast<char*>(c); c_p[1] = 'Y'; cout << c << endl; //打印结果 hYllo}void main(){ char c[] = "hello"; func(c); system("pause");}
dynamic_cast 父类转为子类
class Person{public: virtual void print(){ cout << "人" << endl; }};class Man : public Person{public: void print(){ cout << "男人" << endl; } void fight(){ cout << "男人会战斗" << endl; }};class Woman : public Person{public: void print(){ cout << "女人" << endl; } void facePait(){ //化妆 cout << "女人会化妆" << endl; }};
void func(Person* obj){ //调用子类特有的函数 转为实际类型 //Man *m = (Man*)obj; //转型失败并不知道 Man* m = (Man*)dynamic_cast<Man*>(obj); if (m!=NULL){ m->fight(); } Woman* w = dynamic_cast<Woman*>(obj); if (w!=NULL){ w->facePait(); }}
void main(){ Woman w1; Person *p1 = &w1; func(p1); //打印结果:女人会化妆 //Woman* w_p = &w1; //func(w_p);//可以直接用子类赋给父类 system("pause");}
reinterpret_cast 函数指针转型 不具备移植性(和编译平台有关)
void func1(){ cout << "func1" << endl;}void func2(){ cout << "func2"<<endl;}typedef void(*f_p)();
void main(){ //函数指针数组 f_p f_array[6]; //赋值 f_array[0] = func1; //C方式 //f_array[1] = f_p(func2); //C++方式 f_array[1] = reinterpret_cast<f_p>(func2); f_array[1](); system("pause");}
打印结果: func2
2 IO
首先引入#include <fstream>
文本文件操作
void main(){ char* fname = "E://test.txt"; //输出流 ofstream fout(fname); //创建失败 if (fout.bad()){ return; } fout << "Hello " << endl; fout << "rose" << endl; //关闭 fout.close(); //读取 ifstream fin(fname); if (fin.bad()){ return; } char ch; while (fin.get(ch)){ //输出 cout << ch; } fin.close(); system("pause");}
执行结束后,将会看到E盘下的Test.txt。打印结果为:Hello Rose。
二进制文件
void main(){ char *src = "E://src.jpg"; char *dest = "E://dest.jpg"; //输入流 ifstream fin(src, ios::binary); //输出流 ofstream fout(dest, ios::binary); if (fin.bad()||fout.bad()){ return; } while (!fin.eof()){ //读取 char buff[1024] = {0}; fin.read(buff,1024); //写入 fout.write(buff,1024); } //关闭 fin.close(); fout.close(); system("pause");}
执行结束后,将会看到E盘下的拷贝文件和之前的文件内容一样
对象持久化
class Person{public: Person(){ } Person(char *name,int age){ this->name = name; this->age = age; } void print(){ cout << name << "" << age << endl; }private: char*name; int age;};
void main(){ Person p1("Kobe",39); Person p2("Rose",28); //输出流 ofstream fout("E://c_obj.data",ios::binary); fout.write((char*)&p1,sizeof(Person)); fout.write((char*)&p2,sizeof(Person)); fout.close(); //输入流 ifstream fin("E://c_obj.data",ios::binary); Person tmp; fin.read((char*)(&tmp),sizeof(Person)); tmp.print(); fin.read((char*)(&tmp), sizeof(Person)); tmp.print(); system("pause");}
执行后,打印结果:Kobe39 Rose28
。
3 STL(standard template library)标准模板库
#include <vector>void main(){ //动态数组 不需要使用动态内存分配,就可以使用动态数组 vector<int> v; v.push_back(32); v.push_back(20); v.push_back(36); v.push_back(32); for (int i = 0; i < v.size();i++){ cout << v[i] << endl; } system("pause");}
打印结果:32 20 36 32
#include <string>void main(){ string s1 = "NBA AllStar:"; string s2("Kobe Blyant"); string s3 = s1 + s2; cout << s3 << endl; //转C字符串 const char *c_str = s3.c_str(); cout << c_str << endl; system("pause");}
打印结果 NBA AllStar:Kobe Blyant
NBA AllStar:Kobe Blyant
阅读全文
0 0
- C++笔记 类型转换,IO,STL标准模板库
- C++:标准模板库(STL)
- C++STL标准模板库
- C++:STL(标准模板库)
- C++_标准模板库(STL)
- 笔记:标准模板库(STL)
- C++:标准库和标准模板库STL概述
- 标准模板库(STL)
- STL标准模板库
- STL标准模板库
- STL标准模板库
- STL标准模板库
- STL 标准模板库
- 标准模板库 (STL)
- STL标准模板库
- 标准模板库-STL
- STL 标准模板库
- 标准模板库STL
- Junit 中after与afterclass 区别
- Java方法的可变参数个数
- iOS-内存管理
- 文档记录
- C++ 中通过GetAdaptersInfo获取网卡配置和Ip地址信息
- C++笔记 类型转换,IO,STL标准模板库
- 4、Java递归
- Trafodion 安装之HBase配置优化
- 【C#】简单解决PathTooLong的Exception
- 02_Qt的qDegug函数和QDebug类
- iOS 开发 NSNotificationCenter
- mysql笔记 (早前的,很乱)
- oracle11g的卸载
- 【前端】使用JS替换URL的参数(代码案例)