在前一篇文章中我们说到了如何解决对象的循环引用问题,这一篇文章我们就来介绍一下OC中的对象拷贝概念,这个对于面向对象语言中都会有这种的问题,只是不同的语言有不同的解决方式:C++中有拷贝构造函数,Java中需要实现Cloneable接口,在clone方法中进行操作。但是不过OC更偏向于Java这种方...
分类:
其他好文 时间:
2015-01-03 15:49:19
阅读次数:
189
#include using namespace std;//关于类不展现按位拷贝语义的几种情况/** *1.类的成员对象含有默认拷贝函数 *2.继承的基类包含拷贝函数(无论是合成的还是自己定义的) *3.有虚函数,因为虚指针按位拷贝有问题 *4.派生自虚基类 */ class Word{publ....
分类:
其他好文 时间:
2015-01-02 22:19:44
阅读次数:
290
#include using namespace std;//word类展现了默认拷贝语义,不会合成默认拷贝构造函数,而是对于每一个成员变量实时memberwise的bitcopyclass Word{public: Word(const char*) { } ~Word()...
分类:
其他好文 时间:
2015-01-02 17:27:37
阅读次数:
165
在《C++ primer》中文第四版中,关于拷贝构造函数(也称复制构造函数)是这样定义的:是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。 问题来了!为什么形参必须为该类类型的引用?而不能是值传递方式?(PS:其实传值和传址都可以统一为传值,前者传的是对象的值...
分类:
编程语言 时间:
2014-12-31 12:56:18
阅读次数:
274
拷贝构造函数
如果没有定义拷贝构造函数,那么编译器会自动生成一个拷贝构造函数,但是这个拷贝构造函数是有一定限度的。
一般来说这个拷贝构造函数是按照位直接拷贝的,但是在有些情况下这种初始化是有问题的,在特殊的四种情况下是有问题的,在有问题的情况下,可以举例说明。
如果一个有多态性质的对象,子类赋值给父类,调用了拷贝构造函数,这个时候就需要给父类的虚拟函数表重新分配,使得虚拟函数表和子类不是同一...
分类:
其他好文 时间:
2014-12-27 20:29:38
阅读次数:
161
好长时间没写C++了,今天写了个很简单的String类,竟然调试了半天,最终发现了一个十分隐蔽的陷阱,写出来供大家分享。
C++中类的拷贝构造函数的作用就是通过类的一个对象来实例化另一个对象。下面是我写的一个MyString类,头文件MyString.h:
#include
using namespace std;
class MyString
{
public:
MyString();...
分类:
编程语言 时间:
2014-12-26 16:41:10
阅读次数:
171
#include "X.h" X foo()
{ X xx; // …… return xx;
} ① 每次foo()被调用,就传回xx的值 ② 如果class X定义了一个拷贝构造函数,那么当foo()被调用时,保证该拷贝构造函数也会被调用 第一个假设的真实性,必须视class X如何定义,第二个...
分类:
其他好文 时间:
2014-12-23 22:39:02
阅读次数:
254
在派生类中如何写拷贝构造函数一种形式:派生类拷贝构造函数名(对象p的引用):基类构造函数名(参数列表)如:student::student(student&p):stud(p.num,p.name,p.sex)//注意,参数形式,是对象的引用,我们知道引用是C++特有的,这又是一个引用的用法 呵呵一...
分类:
其他好文 时间:
2014-12-22 12:53:50
阅读次数:
257
当我们自己编写拷贝构造函数时,编译器就不会为该类生成默认拷贝构造函数了,对于assignment operator也是如此。1. 拷贝构造函数中记得调用父类的拷贝构造函数,或者相应复制过程class Man {private: int age;public: Man(int _age =...
分类:
编程语言 时间:
2014-12-21 20:40:44
阅读次数:
132
主要讲了1. 一般情况下编译器会为类创建默认的构造函数,拷贝构造函数和copy assignment函数2. 执行默认的拷贝构造/copy assignment函数时,如果成员有自己的拷贝构造/copy assignment函数就执行它,否则就按bit拷贝/赋值3. 几种编译器不会为类生成默认的co...
分类:
编程语言 时间:
2014-12-21 16:36:21
阅读次数:
271