C++学习笔记1
Posted 做个优雅的衣冠禽兽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习笔记1相关的知识,希望对你有一定的参考价值。
本人是是大一学的C,现在大二新开了C++。于是便开始入手C++。所以一开始就没有无所谓的基本的总结。直接是从C过渡到C++。
一、对C++的初步认识
1. 在C中不支持表达式做左值, 即在C中a=b=100可以,但(c=d)=200不可以,因为(c=d)为表达式。在C++中表达式可以被赋值。
a=b=100;//运算过程:先将100赋给b,然后再将b赋给a,此代码在C中也可以。
(c=d)=200;//运算过程:先将d赋给d,再将200赋给c。等价于c=d;c=200,此代码只能在C++中通过。
2.关于常量、指针常量的初步认识
const int a=100;
int b=a;
/*const int * const pa;//error
第一个const定义的是pa所指向的变量为常量,其值不能改变,所以应在定义时初始化,否则以后不能初始化,但可以编译过去。
第二个const定义的是指针pa为常量,其值不能改变,所以会报错。
正确写法:const int * const pa=&a;
*/
const int *pa;//此行只是定义pa指向的变量为常量,所以指针可以被赋值。
pa=&a;
//*pa=50;//error 此时pa所指向的变量a为常量,不能修改其值。
//int *pb=pa;//error 指针pa所指向的变量为常量,而pb所指向的则是一个变量,其类型不一样,不能将两个不一样类型变量的地址赋值。
const int *pb=pa;//此时将pb指向的变量定义为常量,则可以。
cout<<*pa<<endl<<*pb<<endl;
3.C++的输入输出
cin、cout为类对象,scanf、printf为函数
对于实型,cout 默认输出六位有效数据。
setw()用于指定域宽,头文件为iomanip。
setiosflags(ios::left)用于左对齐输出。
setprecision(n)<<setiosflags(ios::fixed)合用,可以设置小数点右边的位数。n表示小数位数。
setfill("字符")用于指定字符填充,其为全局。
注意 : 默认的cout输出是十进制,
但当改变格式输出后,其默认则不再起效,输出格式变成最后的格式。
当程序结束关闭再次打开时则还是默认为十进制输出。
int a;
cout<<"输入一个数:";
cin>>a;
cout
<<"默认输出:"
<<a<<endl;
cout
<<"十进制输出:"
<<dec<<a<<endl;
cout
<<"八进制输出:"
<<oct<<a<<endl;
cout
<<"十六进制输出:"
<<hex<<a<<endl;
cout
<<"此时再用默认输出时,其默认输出指定为最后一次的格式输出"<<endl
<<"默认输出:"
<<a<<endl;
cout
<<"指定域宽输出:"<<endl
<<setw(8)<<dec<<a<<endl;
cout
<<"左对齐输出:"<<endl
<<setw(8)<<setiosflags(ios::left)<<a<<endl;
4. 函数重载
函数重载原则:函数名相同、函数参数表不同(参数类型、参数个数、参数顺序)
函数返回类型不同不能构成重载。
匹配重载函数原则:
严格匹配,找到则调用。
通过隐式转换寻求一个匹配,找到则调用。
注意:
int到long和double,double到int和float隐式类型转换
遇到这两种情况则会出现二义性导致错误。
重载的原理:利用倾轧技术,将函数名进行倾轧。
倾轧发生在两个阶段:.cpp编译阶段和.h的声明阶段,
只有两种阶段同时进行才能匹配调用。
避免倾轧的方法:在函数前加extern "C"
int print(int a)
{
cout<<"参数是数字"<<endl;
return 0;
}
int print(char b)
{
cout<<"参数是字符"<<endl;
return 0;
}
int print(char b,int a)
{
cout<<"参数是字符、数字"<<endl;
return 0;
}
int print(int a,char b)
{
cout<<"参数是数字、字符"<<endl;
return 0;
}
5.运算符重载
运算符重载:其本质就是定义了一个函数,用operator关键字定义。
struct COMP
{
float real;
float image;
};
COMP operator+(COMP one,COMP another)
{
one.image+=another.image;
one.real+=another.real;
return one;
}
int chongzai()
{
COMP num1={1,2};
COMP num2={3,5};
COMP sum=num1+num2;
cout<<"("<<sum.real<<","<<sum.image<<")"<<endl;
return 0;
}
6.引用
1.引用没有定义,是一种关系型声明。
声明它和原有某一变量(实体)的关系。故而类型
与原类型保持一致,且不分配内存。与被引用的变量有相同的地址。
2.声明的时候必须初始化,一经声明,不可变更。
3.可对引用,再次引用。多次引用的结果,是某一变量具有多个别名。
4.不能建立引用的引用,但可以对引用再次引用。【int &rb=ra】
可以对引用取地址【int *p=&ra】
常引用:
const 不可改变,不可通过指针或引用去改变。
const 对象的引用必须是const 的,将普通引用绑定到const 对象是不合法的。
const 引用可使用相关类型的对象(常量,非同类型的变量或表达式)初始化。
使用const的原因:
1,使用const 可以避免无意修改数据的编程错误。
2,使用const 可以处理const 和非const 实参。否则将只能接受非const 数据。
3,使用const 引用,可使函数能够正确的生成并使用临时变量(如果实参与引用参
数不匹配,就会生成临时变量)
int a=4;
const int b=5;
nt &ra=a;
//const int *p=a;//error const 对象的引用必须是const 的
const int &rb=b;
cout<<"a="<<a<<endl<<"ra="<<ra<<endl;
cout<<"b="<<b<<endl<<"rb="<<rb<<endl;
以上是关于C++学习笔记1的主要内容,如果未能解决你的问题,请参考以下文章
Unity2019.4.16f1c1 2d学习笔记 part1