1.创建对象:
在java中创建对象只能用new才行,返回的是引用类型,所以对象名其实是引用。而C++中的对象创建不一样,C++可以用指针存对象,相当于引用。也可以直接用类标识符来创建对象。如Person是类,Person a,b;在C++中就创建了两个对象,在java中是Person对象的引用。
2.C++中了this指针:
C++中的this指针和java中的一样。在C++中,this指针指向当前对象,this指针隐含在每个成员函数之中,其类型是class className *.
内部机制:
在C++中访问数据成员都是隐含的使用this指针操作的。需要注意的是。
1.this指针是const类型,不可改变。
2.this指针针对对象,所以静态成员是没有this指针的。
3.构造函数和析构函数
构造函数就不说了,只说下默认构造函数就死className() {},默认会生成。但是如果你自己定义了构造函数,而且不是定义成默认构造函数,就要在定义一下默认构造函数,不然创建对象时候必须指定参数,不能用无参数的。
析构函数,就是用来在对象要销毁时候,回收一些对象自己向系统申请的内存。析构函数调用完后,系统才清除对象本身占据的内存。
Tips:
1.析构函数不能重载,只有一种形式~className() {},这是和构造函数的区别
2.三种情况下调用析构函数,对象离开局部作用域后,撤销对象触发,程序终止,触发;delete运算符回收new创建的对象触发;临时匿名函数使用完毕;
4.拷贝构造函数和单参构造函数
(1)拷贝构造函数,其实就是构造函数中的单参数形式的构造函数,只是其参数比较特别,是对自身同类对象的引用。拷贝构造函数在一下几个的方会用到。
Date a;Date b(a);//调用的就是拷贝构造函数
Date b = a;//调用的也是拷贝构造函数
function(Date d){….};function(a);//调用的也是拷贝构造函数(先创建Date类的匿名对象,然后调用拷贝构造函数)
Date c = function(a);//这边function返回Date对象,也是调用拷贝构造函数(没有创建匿名对象)
(2)单参构造函数
单参数构造函数。其实拷贝构造函数也是单参构造函数。但是我将他们区别开来,主要是单参构造函数,主要是用在,隐式的类型转换上。
如你定义了一个Integer类,直接Integer a = 1;是会出错的。因为1不能自动或者隐含的转换成Integer对象,所以这时候你就要定义
单参数构造函数,用来让自动转换,在java中称为包装。由于是构造函数,参数中的类型就是那个要转换的类型。其它和基本构造函数一样。
5.静态成员
静态成员又分为静态数据成员和静态函数成员。C++中的静态函数成员和java也没区别。主要是静态数据成员。所以我们总结下静态数据成员
(1)静态数据成员和类共存亡而不是和对象。
(2)静态数据成员在类加载时候分配空间并进行初始化,而不是在对象加载时候。所以静态数据成员默认初始化为0。
重点是:类中的静态数据成员知识一份声明,必须在类外重新定义并初始化静态数据成员。
(3)类外通过类作用域运算符::访问静态数据成员。
6.const用法
(1)const成员函数,这时候const加载函数名后面 {}之前。表示函数不会改变当前对象的状态,而且只能调用const成员函数。(养成习惯,能加尽量加)
Tips:这里const也是函数签名的一部分。
(2)const对象,表示常量对象。
(3)const形参,表示函数中不会改变该形参。注意:常量对象,只能调用const成员函数,因为这才能保证状态不被改变,同时这样保证了他就是常量对象。
Tips:这里const也是函数签名的一部分。
(4)const返回值,说明返回值是不可以改变的。
以上这些都是总结,不是写给没基础的人看的。只是为了方便整理和记忆。