由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++拷贝狗仔函数多余参数的讨论
相关主题
c++类未完成初始化,如何引用this?刚看完类这一章,有些大小问题,请指教,谢谢
关于构造函数的一道测试题 (转载)simple question on C++ initialization list
template 类的继承问题C++构造函数的问题
没有经过构造函数???C++的"初始化"小结
C++虚方法问题[c++] 关于构造函数的一个小问题
[合集] 基类函数已经是virtual了,为啥子类还要virtual啊?问两个关于Emacs的c++补全问题
Exception模板类中的一个类型问题?
老年转行工程师问问C++11基本问题类设计的一个问题
相关话题的讨论汇总
话题: object1话题: parent话题: 拷贝话题: 构造
进入Programming版参与讨论
1 (共1页)
b***i
发帖数: 3043
1
我们的项目里有很多类都是IRealObject的子类。构造的时候通常是Object1(
IRealObject* parent)
这些类在构造的时候需要设定一些成员,比如folder。而根据parent可以构造自己的,
比如folder = parent->Folder()+"/"+name。
我最近发现一个问题,就是拷贝构造的时候不复制parent。这个很正常,因为拷贝的和
原来的是不一样的。但是这样的话,拷贝构造的时候无法构造folder,因为无法访问
parent.
我于是提议,改变拷贝构造函数成为Object1(Object&, IRealObject*p=nullptr)。这
样的话,通过传入多余的参数可以解决这个问题。
想听大家的意见。这样做行不行。
r****t
发帖数: 10904
2
你可以加ctor做这件事,但不能叫做copy ctor
d***a
发帖数: 13752
3
Folder()是private的方法吧?把它改成protected就可以了。Protected就是为这种用
途设计的,让某些成员可以被子类访问但不能被外部访问。

【在 b***i 的大作中提到】
: 我们的项目里有很多类都是IRealObject的子类。构造的时候通常是Object1(
: IRealObject* parent)
: 这些类在构造的时候需要设定一些成员,比如folder。而根据parent可以构造自己的,
: 比如folder = parent->Folder()+"/"+name。
: 我最近发现一个问题,就是拷贝构造的时候不复制parent。这个很正常,因为拷贝的和
: 原来的是不一样的。但是这样的话,拷贝构造的时候无法构造folder,因为无法访问
: parent.
: 我于是提议,改变拷贝构造函数成为Object1(Object&, IRealObject*p=nullptr)。这
: 样的话,通过传入多余的参数可以解决这个问题。
: 想听大家的意见。这样做行不行。

d***a
发帖数: 13752
4
另外,你这个不是copy ctor啊:
Object1(IRealObject* parent)
这样的才是:
IRealObject(IRealObject* obj)
Object1(Object1* obj)

【在 b***i 的大作中提到】
: 我们的项目里有很多类都是IRealObject的子类。构造的时候通常是Object1(
: IRealObject* parent)
: 这些类在构造的时候需要设定一些成员,比如folder。而根据parent可以构造自己的,
: 比如folder = parent->Folder()+"/"+name。
: 我最近发现一个问题,就是拷贝构造的时候不复制parent。这个很正常,因为拷贝的和
: 原来的是不一样的。但是这样的话,拷贝构造的时候无法构造folder,因为无法访问
: parent.
: 我于是提议,改变拷贝构造函数成为Object1(Object&, IRealObject*p=nullptr)。这
: 样的话,通过传入多余的参数可以解决这个问题。
: 想听大家的意见。这样做行不行。

b***i
发帖数: 3043
5
我说的是,Object1(IRealObject* parent)是构造函数。
Object1(Object1&)是拷贝构造函数,但是由于parent没有拷贝,无法使用,所以在构
造成员的时候无法成功。
现在讨论决定,不使用构造函数。

【在 d***a 的大作中提到】
: 另外,你这个不是copy ctor啊:
: Object1(IRealObject* parent)
: 这样的才是:
: IRealObject(IRealObject* obj)
: Object1(Object1* obj)

1 (共1页)
进入Programming版参与讨论
相关主题
请教c++数组初始化C++虚方法问题
[合集] 关于构造函数[合集] 基类函数已经是virtual了,为啥子类还要virtual啊?
为啥gcc找不到类的构造函数?Exception
构造函数里的异常处理老年转行工程师问问C++11基本问题
c++类未完成初始化,如何引用this?刚看完类这一章,有些大小问题,请指教,谢谢
关于构造函数的一道测试题 (转载)simple question on C++ initialization list
template 类的继承问题C++构造函数的问题
没有经过构造函数???C++的"初始化"小结
相关话题的讨论汇总
话题: object1话题: parent话题: 拷贝话题: 构造