由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 糊涂了,请问一个对象访问的基本问题
相关主题
问个构造函数的问题问个问题--可能比较老
c++ questionc++ exception
关于构造函数的一道测试题 (转载)c++问题,请高人指点迷津,c++ faq lite的一个例子
[c++] 关于构造函数的一个小问题一道c++的考古题
c++类未完成初始化,如何引用this?这段code有啥问题?
初学者问个 C++ constructor 问题吧包含指针的类和vector的问题
protected构造函数可以防止slicing是什么意思?回答C++的弱问题
C++ 中 myobject * a =new myobject[n] 的问题[合集] C++的弱问题
相关话题的讨论汇总
话题: class话题: 对象话题: 访问话题: code
进入Programming版参与讨论
1 (共1页)
w*********r
发帖数: 18
1
D是W的派生类,现在有两个类A和B分别继承W和D,例如
class A : public W
{
...
}
class B : public D
{
A a;
...
}
那么如何在A的实例里访问B的对象?
t****t
发帖数: 6806
2
啥叫"在A的实例里访问B的对象"?

【在 w*********r 的大作中提到】
: D是W的派生类,现在有两个类A和B分别继承W和D,例如
: class A : public W
: {
: ...
: }
: class B : public D
: {
: A a;
: ...
: }

w*********r
发帖数: 18
3
比如说
A的构造函数里怎么访问B的对象?

【在 t****t 的大作中提到】
: 啥叫"在A的实例里访问B的对象"?
X****r
发帖数: 3557
4
大概是指类似
B* A::getContainerB() {
return (B*)((unsigned char*)this - (size_t)&(((B*)0)->a))
}
这样的。
我建议楼主还是老老实实把B的指针传给A不就完了。

【在 t****t 的大作中提到】
: 啥叫"在A的实例里访问B的对象"?
X****r
发帖数: 3557
5
A的构造函数里还没有B的对象呢,没法访问。

【在 w*********r 的大作中提到】
: 比如说
: A的构造函数里怎么访问B的对象?

w*********r
发帖数: 18
6
其实这是个QT的问题,我希望B的对象发射一个信号,然后它包含的A的对象接受这个信
号,但是在A的构造函数里需要用如下函数绑定信号
connect(sender, SIGNAL(foo()),this, SLOT(dosomething()));
这个sender必需是B的实例,可是B的constructor里又先调用A的constructor,我怎么
填这个sender?

【在 X****r 的大作中提到】
: 大概是指类似
: B* A::getContainerB() {
: return (B*)((unsigned char*)this - (size_t)&(((B*)0)->a))
: }
: 这样的。
: 我建议楼主还是老老实实把B的指针传给A不就完了。

g*****g
发帖数: 34805
7
Pass the instance of B to A either using a constructor,
or using a setter.

【在 w*********r 的大作中提到】
: D是W的派生类,现在有两个类A和B分别继承W和D,例如
: class A : public W
: {
: ...
: }
: class B : public D
: {
: A a;
: ...
: }

d****p
发帖数: 685
8
这个牛。
需要在类设计上保证A只能以B的成员形式存在。

【在 X****r 的大作中提到】
: 大概是指类似
: B* A::getContainerB() {
: return (B*)((unsigned char*)this - (size_t)&(((B*)0)->a))
: }
: 这样的。
: 我建议楼主还是老老实实把B的指针传给A不就完了。

d****p
发帖数: 685
9
Thought again and got confused.
To make Xntar's code working, B needs to be defined before A since the code
needs to know B's layout. So A should not be a member object of B - it has
to be a pointer/reference but that invalidates the awesome code :-(

【在 d****p 的大作中提到】
: 这个牛。
: 需要在类设计上保证A只能以B的成员形式存在。

X****r
发帖数: 3557
10
Not really:
class B;
class A {
B* A::getContainerB();
};
class B {
public: // or friend class A
A a;
};
B* A::getContainerB() {
///...
}

code
has

【在 d****p 的大作中提到】
: Thought again and got confused.
: To make Xntar's code working, B needs to be defined before A since the code
: needs to know B's layout. So A should not be a member object of B - it has
: to be a pointer/reference but that invalidates the awesome code :-(

相关主题
初学者问个 C++ constructor 问题吧问个问题--可能比较老
protected构造函数可以防止slicing是什么意思?c++ exception
C++ 中 myobject * a =new myobject[n] 的问题c++问题,请高人指点迷津,c++ faq lite的一个例子
进入Programming版参与讨论
t****t
发帖数: 6806
11
这个写法太野蛮了...

【在 X****r 的大作中提到】
: 大概是指类似
: B* A::getContainerB() {
: return (B*)((unsigned char*)this - (size_t)&(((B*)0)->a))
: }
: 这样的。
: 我建议楼主还是老老实实把B的指针传给A不就完了。

d****p
发帖数: 685
12
OK, right.
Never saw code like this but it works :-)

To prevent A's object from being created outside B's object, A ctor has to be
private and the friendship between A and B is needed.

【在 X****r 的大作中提到】
: Not really:
: class B;
: class A {
: B* A::getContainerB();
: };
: class B {
: public: // or friend class A
: A a;
: };
: B* A::getContainerB() {

X****r
发帖数: 3557
13
我这个其实是作为反面例子的:我估计楼主要的是这个,但是我不建议他做这种事。
把B的指针传过去就完了嘛。

【在 t****t 的大作中提到】
: 这个写法太野蛮了...
X****r
发帖数: 3557
14
class B {
A* a;
}
这样你就可以推迟A的构建了。

【在 w*********r 的大作中提到】
: 其实这是个QT的问题,我希望B的对象发射一个信号,然后它包含的A的对象接受这个信
: 号,但是在A的构造函数里需要用如下函数绑定信号
: connect(sender, SIGNAL(foo()),this, SLOT(dosomething()));
: 这个sender必需是B的实例,可是B的constructor里又先调用A的constructor,我怎么
: 填这个sender?

z****e
发帖数: 2024
15
是的,其实包括私有权限的,都可以直接访问到。
只要位置移动准确就可以了。所以在某种程度上说,private是形同虚设。

【在 t****t 的大作中提到】
: 这个写法太野蛮了...
1 (共1页)
进入Programming版参与讨论
相关主题
[合集] C++的弱问题c++类未完成初始化,如何引用this?
急问:compile and build dependency初学者问个 C++ constructor 问题吧
find bugs of c++ codesprotected构造函数可以防止slicing是什么意思?
C++ questionC++ 中 myobject * a =new myobject[n] 的问题
问个构造函数的问题问个问题--可能比较老
c++ questionc++ exception
关于构造函数的一道测试题 (转载)c++问题,请高人指点迷津,c++ faq lite的一个例子
[c++] 关于构造函数的一个小问题一道c++的考古题
相关话题的讨论汇总
话题: class话题: 对象话题: 访问话题: code