首页
社区
课程
招聘
请管理员将帖子删除了吧
发表于: 2013-11-4 15:08 6602

请管理员将帖子删除了吧

2013-11-4 15:08
6602
收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 21
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
public继承子类不能访问基类私有成员
2013-11-4 15:28
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
本来也没打算访问,只是实现一个类似接口的东东,让别人使用它,忘记基类
2013-11-4 15:51
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
用接口不行吗
2013-11-4 16:07
0
雪    币: 2155
活跃值: (29)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
类的继承必须遵守C++中的那三种,除了共有方式、私有方式、保护方式之外,没有其他的方法可以继承并访问积累的成员或者方法。

又或者是我没有正确理解你的需求???
2013-11-4 16:13
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
派生类写出来的方法都是基类里public的,
我的问题不是访问方法工成员的问题,而是希望派生类写了方法声明,但不用写实现,希望它直接指向基类的实现,因为方法都仅仅是一个指针而已,理论上可行,但C++标准里是不能实现就不知道了

这么说吧,本意是这样:
class B :public A
{
    int Add(int a, int b)
    {
         return A:Add(a, b);
    }
}

希望派生类的方法其实是调用基类的方法,不需要显示的调用,编译器或链接器直接解决,因为类方法的原理只是在类定义结构里填写函数指针的问题
2013-11-4 16:32
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
嗯,比如?
2013-11-4 16:33
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
interface IPP
{
virtual int Add(int a, int b) = 0;
}

class A : public IPP
{
public:
    virtual int Add(int a, int b)
    {
        return a+b;
    }
    int Sub(int a, int b)
    {
        return a-b;
    }
}

IPP* p = new A;
pb->Add(1, 2);
2013-11-4 16:40
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
我原来也是这样用的,这个问题就是让别人直接new A了,我是不想让他们看到A而已,所以我搞了个B把A包起来,告诉他们只用B,呵呵
不过可能C++里没有办法实现我说的这种奇怪的需求
2013-11-4 16:51
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
封装成类似COM的形式
GetClassObject或者QueryInterface
就可以屏蔽实现类了
2013-11-4 16:58
0
雪    币: 952
活跃值: (2151)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
把构造函数声明成私有
2013-11-4 17:21
0
雪    币: 2155
活跃值: (29)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
那我感觉你还不如封装到COM或者DLL里面了,我认为还真没什么好办法让他看不到Class A
2013-11-4 17:27
0
雪    币: 40
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
就像STL那样, 以适配器的形式把基础容器包装成stack吗?
2013-11-4 19:43
0
雪    币: 220
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
class A
{
public:
    int Add(int a, int b)
    {
        return a+b;
    }
    int Sub(int a, int b)
    {
        return a-b;
    }
}

//B类不需要写任何实现
class B
{
public:
    int Add(int a, int b)
    {
         return pBase->Add(a,b);
    }
private:
    A* pBase;
}

使用者使用如下:
B b;
b.Add(1, 2);

像这样也可以满足你的需求啊
2013-11-5 08:55
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
这样做的问题是,需要把每个方法要写一遍,手动实现调用跳转
我希望有自动直接映射到基类
2013-11-5 10:59
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
其实也不是屏蔽死,只是用户直接面向的是类B,而非类A,虽说他可以去类A看所有方法,但因类A太复杂,大家都不想看
2013-11-5 11:00
0
雪    币: 174
活跃值: (620)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
关键是,类B只写方法,不写方法的实现,哪怕是重名的方法,都不会连接到类A中,必须重写所有方法……
2013-11-5 11:01
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
先学语文再学c++吧
2013-11-5 13:29
0
游客
登录 | 注册 方可回帖
返回