摘要:
类对象作为类成员的时候,我们需要考虑构造和析构的顺序。 有 class A 和 class B ,如果 class A 的对象作为 class B 的成员,在构造一个 B 的对象时,首相应该构造 A 的对象,让后再构造 B 的对象;而析构 B 的对象时,首相析构 B 的对象再析构A的对象。 阅读全文
摘要:
浅拷贝:默认的拷贝构造函数实现的是浅拷贝,对于指针成员,浅拷贝编译器直接将指针的地址拷贝给新的对象,而不是将指针指向的内容指向新对象,这样在进行析构的时候就会多次释放导致崩溃。 深拷贝:为了解决浅拷贝的问题,我们通常进行手动的深拷贝,在堆中重新申请一块儿内存,然后将拷贝对象的内容复制进去,实现内容的 阅读全文
摘要:
这里讨论两种情况下的拷贝函数调用: 作为参数传值过程中的拷贝函数调用,有一个Dog类,d1是Dog类的一个实例现在通过function将d1传入,void function(Dog dog); d1是dog的实参,在调用function的过程中产生了一个拷贝构造的调用,相当于Dog dog = Do 阅读全文
摘要:
调用无参构造不能使用括号,编译器会判定这种写法为函数申明 构造函数除了一般的参数构造和默认的无参构造,还有拷贝构造注意拷贝构造的写法。假设有一个Dog类拷贝构造函数为Dog(const Dog &d);这样的构造函数就是拷贝构造函数。 匿名对象不能使用拷贝构造。假设存在一个Dog类实例d1,那么Do 阅读全文
摘要:
封装是面对对象的三大特性之一,它是指将属性和行为作为整体来描述事物 封装通过关键词class将事物的属性和行为绑定在一起。 具体可以这样描述:当我们想要描述一只狗的时候,首先会想到他的外在特点,比如狗的品种,颜色,名字,体重等,这些都称作狗的属性;同时,狗能喝水,吃饭,还能撒娇,这些都是狗的行为。虽 阅读全文