-
常成员函数和普通成员函数可以互为重载 void changeX() const; void changX(); 普通实例对象调用changX()是普通方法,常实例对象调用的changX()是常成员函数
常成员函数中修改对象的值是错误的
查看全部 -
111111
查看全部 -
this指针代表本对象的地址,编译时,编译器自动为每个成员函数添加this指针参数,从而,程序员可不用显示写出this参数。 this指针:指向对象自身数据的指针。 Array arr1 : this <=> &arr1 Array arr2 :this <=> &arr2
在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。
this指针只能在类的成员函数中使用,它指向该成员函数被调用的对象。this指针一般用于反回当前对象自身,由于this指针始终指向调用对象,因此不能在静态成员函数的定义中使用this指针。静态成员函数一般不需要调用对象,因此也就没有this指针。
对象各自的this指针指向各自对象的首地址,所以不同对象的this指针一定指向不同的内存地址;this指针无需用户定义,是编译器自动产生的;当成员函数的参数或临时变量与数据成员同名时,可以使用this指针区分同名的数据成员;this指针也是指针类型,所以在32位编译器下也占用4个基本的内存单元,即sizeof(this)的结果为4。
查看全部 -
this指针就是指向对象自身数据的指针,解决参数与数据成员同名问题
查看全部 -
内存中的对象成员指针
实例化Line对象时,两个指针会被定义出来-占8个基本内存单元(32位编译环境中,一个指针占4个基本内存单元)
在构造函数中,通过new实例化两个Coordinate对象,内存在堆中,而不在Line对象中-占16个基本内存单元(4个int型),所以sizeof(line)的值为8
当我们销毁Line时,应先释放掉堆中的内存,然后释放掉Line对象本身的内存
查看全部 -
Coordinate p1;
Coordinate *p2=&p1;
通过上面的方式就可以通过p2来操作p1的成员变量。
查看全部 -
(*p).m_iY,(*p)为对象指针
查看全部 -
深拷贝时,需要在拷贝构造函数中,重新分配堆内存,并将堆内存地址上的值复制给新的堆内存
查看全部 -
浅拷贝只是简单的值拷贝,在拷贝堆上对象时,只是将引用拷贝过去,在销毁时,同一块堆上内存被释放两次报错。
深拷贝会将堆上内存的值也进行拷贝,在销毁时,是不同的堆上内存分别进行销毁。
截图为深拷贝
查看全部 -
当对象(用一个类描述)作为数据成员时,先实例化对象成员,再实例化对象,销毁时与创建过程相反
查看全部 -
Coordinate* p = new Coordinate[3]; delete p; delete []p;
delete p 只执行一次析构函数。
delete []p 执行三次析构函数。
查看全部 -
栈区和堆区初始化数组对象的区别
查看全部 -
如果不加 const 修饰就是一般情况下,this 是具有读写权限的,但是加了const修饰他就只能读而不能写 了,因为Coordinate 对象用const修饰了,那么他就只能读不能写了,也就要求他的隐含参数this只能是const也就是只能有读权限,如果此时不去修改this的权限,他就是具有读写权限,这和Coordinate只具有读权限是矛盾的,编译的时候就会报错
查看全部 -
const int A;
int *p=&A;
这个就是错误的,因为A已经设置为常量,而指针p是可以读写的,用一个权限大的指针p去指向一个权限小的A,是不可以的,会有风险。
coordinate的对象被const修饰,变成了常对象,那么指向它的指针this也必须变成常指针,否则就有改变常对象值得风险,因此成员函数内容无论是否改变了常对象的值,都要变成常成员函数,这也就是为什么getX()和getY()要变成常成员函数getX() const和getY()const
查看全部 -
当成员类的构造函数需要数据传入时必须在该类的构造函数的初始化列表中进行初始化查看全部
举报