免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1500 | 回复: 7
打印 上一主题 下一主题

高手帮忙出个主意吧,class 依赖的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-01-20 08:50 |只看该作者 |倒序浏览
我现在有个class A 需要用到其他的一个class B

class A
{
  public:
    B b;
   
    void test(){B.testB();}

};

现在问题是A需要封包,B里面的member需要根据情况来改变,
B::testB(void){ return B:;}可能会变成
B::testB(void) {return B::y;}, 具体内容现在还不能确定。
也就是说B::testB(void);肯定会用到,但是B的其他成员还没确定。

以后应用class C 需要同时使用到 A和B.

不知道说明白乐没有。

高手指点一下,我该怎么办呢?谢谢,

[ 本帖最后由 hangover 于 2007-1-20 09:08 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-01-20 08:57 |只看该作者
====

这个问题,光是这个版里,就已经被提到三次以上了。

先声明再使用。

====

论坛徽章:
0
3 [报告]
发表于 2007-01-20 09:01 |只看该作者
对不起,刚才没写完就发出去了。

论坛徽章:
0
4 [报告]
发表于 2007-01-20 10:50 |只看该作者
也就事说,B这个类,你有能确定的部分,也有不能确定的部分, 那么应该在B上面作一个基础类B'. test定义成虚拟方法, B从B'继承. A调用的是B'类

论坛徽章:
0
5 [报告]
发表于 2007-01-20 16:37 |只看该作者
不明白你说的,按顺序声明
class B
{};
class A
{};
class C
{};
不就可以了,什么都不需要做啊,所谓虚基类,虚方法都是属于模式的东西,不用也都可以实现

论坛徽章:
0
6 [报告]
发表于 2007-01-21 07:04 |只看该作者
好像我没太说明白,现在问题是A需要封包,做成dll,那去卖了,也就是不能再编译了。
但是A肯定用到B::testB(void);

至于class B是什么样的,需要用户自己定义,当然,如果用户可以定义B,也就可以全部改变
B::testB(void)里面的内容。但是B::testB(void)的原型是给定的。

论坛徽章:
0
7 [报告]
发表于 2007-01-21 07:27 |只看该作者
原帖由 ttvast 于 2007-1-20 10:50 发表
也就事说,B这个类,你有能确定的部分,也有不能确定的部分, 那么应该在B上面作一个基础类B'. test定义成虚拟方法, B从B'继承. A调用的是B'类


好像你的这个办法可以,但是。。。
class Bbase
{
public:
    virtual testB(){}
}

class B : Bbase
{
private:
    double xx;
public:
    testB(){return xx;}
}

class A // 现在这个A和Bbase 一起封包。
{
Bbase b; 这个好像不能用到B,而是Bbase阿。麻烦您再指点一下,谢谢

}

论坛徽章:
0
8 [报告]
发表于 2007-01-21 07:30 |只看该作者
谢谢ttvast,这样编译可以了,可以给点建议么?

class Bbase
{
public:
        virtual void testB(void) {};
};

class A
{
private:
        Bbase *base;
public:
        A(Bbase *ptr_b){base=ptr_b;}

        void testA()
        {
                base->testB();
        }
};


main file:

#include <iostream>
#include "base.h"

class B : public Bbase
{
public:
        void testB(){std::cout<<"class B"<<std::endl;}
};

int main()
{
        B b;
        Bbase *base;
        base = &b;
        A a(base);

        a.testA();
        return 0;
}

class B
Press any key to continue . . .

回过头来看,我这个问题确实有点愚昧

[ 本帖最后由 hangover 于 2007-1-21 08:13 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP