能力值:
( LV2,RANK:10 )
|
-
-
2 楼
public继承子类不能访问基类私有成员
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
本来也没打算访问,只是实现一个类似接口的东东,让别人使用它,忘记基类
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
用接口不行吗
|
能力值:
( LV3,RANK:20 )
|
-
-
5 楼
类的继承必须遵守C++中的那三种,除了共有方式、私有方式、保护方式之外,没有其他的方法可以继承并访问积累的成员或者方法。
又或者是我没有正确理解你的需求???
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
派生类写出来的方法都是基类里public的,
我的问题不是访问方法工成员的问题,而是希望派生类写了方法声明,但不用写实现,希望它直接指向基类的实现,因为方法都仅仅是一个指针而已,理论上可行,但C++标准里是不能实现就不知道了
这么说吧,本意是这样:
class B :public A
{
int Add(int a, int b)
{
return A:Add(a, b);
}
}
希望派生类的方法其实是调用基类的方法,不需要显示的调用,编译器或链接器直接解决,因为类方法的原理只是在类定义结构里填写函数指针的问题
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
嗯,比如?
|
能力值:
( 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);
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
我原来也是这样用的,这个问题就是让别人直接new A了,我是不想让他们看到A而已,所以我搞了个B把A包起来,告诉他们只用B,呵呵
不过可能C++里没有办法实现我说的这种奇怪的需求
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
封装成类似COM的形式
GetClassObject或者QueryInterface
就可以屏蔽实现类了
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
把构造函数声明成私有
|
能力值:
( LV3,RANK:20 )
|
-
-
12 楼
那我感觉你还不如封装到COM或者DLL里面了,我认为还真没什么好办法让他看不到Class A
|
能力值:
( LV3,RANK:20 )
|
-
-
13 楼
就像STL那样, 以适配器的形式把基础容器包装成stack吗?
|
能力值:
( 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);
像这样也可以满足你的需求啊
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
这样做的问题是,需要把每个方法要写一遍,手动实现调用跳转
我希望有自动直接映射到基类
|
能力值:
( LV4,RANK:50 )
|
-
-
16 楼
其实也不是屏蔽死,只是用户直接面向的是类B,而非类A,虽说他可以去类A看所有方法,但因类A太复杂,大家都不想看
|
能力值:
( LV4,RANK:50 )
|
-
-
17 楼
关键是,类B只写方法,不写方法的实现,哪怕是重名的方法,都不会连接到类A中,必须重写所有方法……
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
先学语文再学c++吧
|
|
|