C++学习笔记(1)
来源:互联网 发布:python筛选excel数据 编辑:程序博客网 时间:2024/06/05 00:40
1、引用&
声明:数据类型 & 引用名=变量名
函数调用时不会为形参分配内存空间,节约空间;
int a=10;int & yinyong=a;//引用必须初始化void swap(int &a,int &b){}
函数可以返回引用类型
返回的相当于是地址,而不是返回对象本身
int &fn(int &num){return num;}
2、常量const修饰
表示值不能被修改
const int c=10;//常量必须初始化,后期不能修改const int &b=a;//常量引用 a的值变化b跟着变化//在类的成员变量中不同的作用int get_X(void) const;//这个函数只返回x的值,并不修改成员的值
3、函数的默认参数
在函数声明或者定义时可以给参数赋予默认值(有声明时必须在声明上赋予默认值)
如果设置了一个默认值,那么右边的所有参数都必须有默认值
//这是错误的 必须在声明上赋予默认值int fn(int num);int main(int argc, char* argv[]){ int b=fn(); cout<<b;}int fn(int num=10){ num++; return num;}
4、内联函数
incline 函数返回值类型 函数名(形参列表){函数体}
编译时,类似宏替换,使用函数体替换调用处的函数名。
必须先定义后使用,不然会被认为是普通函数
5、函数重载
6、强制类型转换
int a;float b=(float)a;//C风格float b=float(a);//C++风格
4种显示转换方式
static_cast< new_type>(要转换的对象)
只能处理两者间有一定关系的转换
float a=1.9;float* pf=&a;int b=static_cast<int>(a);int* pi=static_cast<int*>(pf);//不能转换
dynamic_cast< new_type>(要转换的对象)
newtype必须是类的指针、类的引用、或者void*
下行转换时会进行安全检查,先尝试转换,如果成功则会返回合法指针,如果失败返回空指针;
还有个要求,类必须是多态,即包括“虚”函数
class Base{virtual void dummy(){}};class Derived:public Base{};int main(int argc, char* argv[]){ Base* pbb=new Base; Base* pba=new Derived; Derived* pd; pd=dynamic_cast<Derived*>(pbb);//父类转子类,不行,返回void*(空指针) pd=dynamic_cast<Derived*>(pba);//子类转子类,没问题 return 0;}
const_cast< new_type>(要转换的对象)
用来修改类型的const或volatile属性
const int var = 10;//int *pi = &var; //不能从const int*转换到int*int *pi = const_cast<int*>(&var);//这样就能转换了const int *p_const = &var;//常量指针指向常量指针无问题*pi = 12;cout << "var:" << var << endl;//原常量的值并未被修改cout << "*pi:" << *pi << endl;//但是使用指针调用出来的值却被修改了,有点怪cout << "*p_const:" << *p_const << endl;//同上cout << "&var:" << &var << endl;//cout << "pi:" << pi << endl;//cout << "p_const:" << p_const << endl;//三个指针均指向同一位置
此方法其实是用在函数参数的传递上
void disp(int *var){ cout << *var << endl;}int _tmain(int argc, _TCHAR* argv[]){ const int var = 10; //disp(&var);//不能直接传递 disp(const_cast<int*>(&var));//实际应用中可能经常出现这种情况,可以传递给函数且不改变原常量 return 0;}
reinterpret_cast< new_type>(要转换的对象)
(重新解释)
用作无关类型之间的转换,比如:它可以把一个指针转换成一个整数、把一个整数转换成一个指针、还可以进行不同类型指针之间的转换
随意在不同类型之间使用可能造成程序被破坏
float fa = 1.5;float *p_fa = &fa;//int i = reinterpret_cast<int>(fa); 不能转换,不是指针int *pi = reinterpret_cast<int*>(p_fa);//正确 int i = reinterpret_cast<int>(p_fa);//正确
7、输入输出流
iostream
cin>>;对应键盘;C stdin
cout<<;对应屏幕;C stdout
cout提供了put输出字符,write输出字符串
char a[] = "abc";cout << "abc" <<endl;cout.put('a').put('b').put('\n');cout.write(a, sizeof(a)-1).put('\n');
数出数据时有时要指定输出格式
cin>>从流中提取数据时,通常忽略其中的空格、换行和Tab等
char ch,ch2; ch= cin.get(); cout << ch << endl; cin.sync();//因为接下来的代码要从流中读入数据,而上一步以回车结尾,所以一定要清除缓存,否则会读入回车 cin.get(ch2);//2种读取单个字符的方法 putchar(ch2);//显示字符 cin.sync(); char buffer[10]; cin>>buffer;//cin.read(buffer,10); cout.write(buffer,sizeof(buffer)-1);//如果输入的字符少于10个后面会有乱码
- 【c/c++】学习笔记1
- C学习笔记1
- C 学习笔记1
- C--学习笔记1
- C语言学习笔记(1)
- C和指针学习笔记(1)
- C和指针学习笔记 (1)
- 《Effective C++》学习笔记(1)
- Objective-C 学习笔记(1)
- C语言学习笔记(1)
- Objective c学习笔记(1)
- C程序设计语言学习笔记(1)
- C++primer学习笔记(1)
- C语言学习笔记(1)
- 学习C专家编程笔记(1)
- Objective-C学习笔记(1)
- C学习笔记(1)--动态分配内存
- 学习笔记:C程序基础(1)
- 实战Linux下三种不同方式的提权技巧
- Linux删除制定时间的文件
- Spark Streaming事务处理彻底掌握
- hihocoder 1479 三等分 树型dp
- tp的大写字母代表的参数
- C++学习笔记(1)
- JAVA学习之文件查找
- 机器学习的监督学习在研究什么
- Decision Tree random forest important variables
- Mysql主从复制,读写分离中间件--mycat
- 教你如何在云服务器上体验Docker服务!
- 代码中如何设置TextView为不可见
- Linux网络编程基础API
- this原型理解