Float/double类型:默认情况下,只输出六位有效数字。
水平制表符 \t 有对其效果,一共占八位
字符串:在c++中字符串的创建方式和c中相同,但也有独有的方式:使用sting创建字符串,但是需要头文件
数据的输入:cin>> 接受的变量名 且字符串可以直接覆盖掉之前的
Const int* p = &a 可以修改指向,不可以修改变量
int* const p = &a 可以修改变量,不可以修改指向
关键字:new 在堆区创建,相当于malloc
语法: 变量类型* 变量名 = new 变量类型(值)
此时:*p = 10
创建数组:使用中括号
释放:delete关键字
引用:
1.使用时必须初始化 2.初始化后,不可改变(不可指向另一个变量)
如: 1. int &b;
2. int a=10; int &b = a; int c=20; int &b=c;
均是错误示例。
使用示例:
同样可以实现a和b值的交换 实现和传地址一样的效果
说明:
不能返回局部变量的引用
第一次ref为10 第二次ref为a的地址
如果函数做左值,那么必须返回引用
用const修饰变量:const int& ref = 10;
相当于int temp = 10;const int& ref = temp;
函数可以有默认值
注意事项:1.函数在调用的时候可以给有默认参数的形参传值,此时形参为传递的值
2.如果函数的某个位置有默认值,那么该形参往后的形参都要有默认值,如上图示例:不可以只给b赋值,而不给c赋值
3.函数的声明和实现中只能有其中一个有默认值,不可以两者同时有
函数重载:函数的名称相同,但是作用不同,提高复用性
需要满足的条件:1.同一个作用域下
2.函数名称相同
3.函数参数的类型不同或者个数不同或者顺序不同
但是函数的返回值不可以作为函数重载的条件
1.引用作为函数重载的条件:
(1).a作为变量
(2).相当于const int &a = 10;语法正确
而int &a = 10;语法错误
2.函数重载碰到函数默认参数,如
不能这样调用函数
重点来哩
类:class 类似于结构体
示例:设计一个类计算圆的周长
class Circle(类名)
{
(访问权限)public:
(属性)int m_r;
(行为,通常为一个函数)
double calculate()
{
return 2*pi*m_r;
}
};
Circle c1;
C1.m_r = 10;
cout << “圆的周长为 ” << c1.calculate() << endl;
封装权限:
公共权限:public 类内和类外都可以访问
保护权限:protected 类内可以访问,内外不可访问。子类可以访问父类的保护权限。
私有权限:private 类内可以访问,内外不可访问。子类不可访问父类的私有权限。
struct默认为公共权限,class默认为私有权限。
成员属性设置为私有的优点:
1.可以自己控制读写权限
2.对于写权限,我们可以检测数据的有效性
此处的return没有返回值,作用为结束函数
利用成员函数来判断两个立方体是否相等
构造函数和析构函数:
构造函数:
1.没有返回值,不用写void
2.函数名与类名相同
3.构造函数可以有参数,可以发生重载
4.创建对象的时候,构造函数会自动调用,而且只调用一次。
析构函数:进行清理的操作
1.没有返回值,不用写void
2.函数名和类名相同,在名称前加~
3.不可以有参数,不能发生函数重载
4.对象在销毁前,会自动调用析构函数,而且只调用一次。
构造函数的分类:
按照参数类型:有参构造和无参构造(默认构造)
按照类型分类:普通构造和拷贝构造
调用:
1括号法
注意:默认构造函数调用后不能加()。
2显示法
注意:不要利用拷贝函数初始化匿名对象
3隐式转换法
构造函数调用规则:
1若一个函数都不写,编译器添加三个函数
2只写析构函数,编译器只提供拷贝函数
3只写拷贝函数,编译器不提供其它
析构函数的作用:若在构造函数在堆区开辟了空间,空间需要在析构函数中释放,但是由于同时调用了拷贝函数(浅拷贝),拷贝函数在结束时再次调用了析构函数,空间释放了两次,此时代码出现问题。
解决方案:使用深拷贝,即在拷贝函数中手写在堆区中开辟内存,存放变量,这样变量在堆区有两块内存,释放的时候可以把两块分别释放。
初始化列表:
固定式:
传参式:更灵活
当类1作为另一个类2的成员时:类2在使用时,构造函数:类1先,类2后;析构函数的顺序则相反。
静态成员变量:
1 在编译阶段分配内存
2 类内声明,类外初始化
3 所有对象共享同一份数据
两种访问方式:通过方式和通过类名
但是如果对象是私有权限,则在类外也访问不到
静态成员函数:同样可以通过对象和类名访问函数
1 程序共享一个函数
2 静态成员函数只能访问静态成员变量
若类内的对象为空,则类的大小为1个字节:
C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占内存的位置,每个空对象也应该有一个独一无二的地址。
如果对象有一个非静态的int类型变量,此时内存为4。
如果对象为静态成员变量或函数(静态或非静态),此变量不属于类的对象。
this指针:
1.解决形参和实参同名的问题,this指针指向 被调用的成员函数 所属的对象,如:
this指针指向p1.
2.返回对象本身
注意函数的返回值为:类名+& 才能返回对象本体
若无&,则返回的是和p2值相同的一个值,p2不会发生改变
带有&时:返回值40 不带&时:返回值为20
空指针访问成员函数:
空指针可以调用不含变量的函数。在showPerson函数中,m_Age其实为this.m_Age,而传入的指针为空,因此this不能指向m_Age.
常对象和常函数:
读取一行的字符串:getline(cin,s)
字符串的长度:s.length().
Substr函数:s.substr(n,m)
截取字符串的子串,从下标为n开始,到m结束,若m省略则表示直到结束。
动态数组:vector 头文件:#include