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');

数出数据时有时要指定输出格式

控制符 作用 dec 10进制 hex 16进制 oct 8进制 setbase(n) 设置整数的基数为n(16、10、8之一) setfill(c) 设置填充字符c,c可以是字符串常量或字符变量 setprecision(n) 设置实数的精度为n位。一般是指有效位数,当以fixed(固定小数位数)或scientific(指数)形式输出时,n为小数位数 setw(n) 设置字段宽度为n位 setiosflags(ios::fixed) 固定小数位输出 setiosflags(ios::scientific) 科学计数法输出 setiosflags(ios::left(or right)) 输出数据左对齐 setiosflags(ios::shipws) 忽略前导空格 setiosflags(ios::uppercase) 科学计数法输出E和16进制输出X时,大写表示 setiosflags(ios::showpos) 输出正数给出+号 resetiosflags 终止已设置的格式状态,在括号中指定内容

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个后面会有乱码
0 0
原创粉丝点击