【发布时间】:2013-01-25 14:10:03
【问题描述】:
我正在为一些自动生成的类编写一个包装器,以提供更好的界面。我写了一个简化的例子来演示这个问题。
我有一个 A 类,它有一个指向 X 类对象的指针,然后我有一个 B 类(继承 A),它有一个指向 Y 类对象(继承 X)的指针。
这一切都很好,除了我不确定存储指向 X 和 Y 的指针的最佳方法是什么。我需要能够操作 A 类和 B 类对象的集合,就好像它们都是 A 一样(使用指向 X 的指针是我所需要的),这适用于我下面的示例。
我的实际问题是如何最好地处理 B 类的情况,它需要操作 Y 类对象而不是 X 类。我确信有一些非常明显的东西我可以在这里使用。每次我使用它时都必须重复转换这个变量并为每个继承我创建的 A 的类定义一个具有不同名称(例如 getY)的方法,这感觉很笨拙。可能有许多像 doStuff 这样的方法,所有这些方法都必须调用 getY。
class X {
private:
int i;
public:
X(int i) : i(i) {}
int getI() {
return i;
}
};
class Y : public X {
private:
int j;
public:
Y(int i, int j) : X(i), j(j) {}
int getJ() {
return j;
}
};
class A {
protected:
X* x;
public:
A(X* a) : x(a) {}
X* get() {
return x;
}
};
class B : public A {
public:
B(Y* y) : A(y) {}
private:
//I could create a new function for each class like class B
Y* getY() {
return (Y*)x;
}
public:
void doStuff() {
Y* y = getY();
y->getJ();
std::cout << "J: " << y->getJ() << cout::endl;
}
};
从主目录中提取:
X* x = new X(5);
Y* y = new Y(5,6);
B b(y);
b.doStuff();
我想到的另一种选择是,当我构造 B 类时,我可以初始化一个 Y 类型变量的指针,该指针指向与 X 中设置的位置相同的位置。只要我的指针是 const,我认为应该是避免两个指向不同事物的引用。
欢迎提出任何想法。
谢谢。
【问题讨论】:
-
在你走上继承之路之前。让我们问一下是 Y 还是 X 还是它们只是共享一个通用接口?
-
是的,我简化的部分内容就是这个。对不起。 X 和 Y 类不是我定义的,而是相互继承的。我将 Y 视为 X 肯定会发生。
-
好吧我明白X和Y现在不是你控制的了,A和B的情况下,我不会使用继承,而是使用接口。让 A 和 B 都实现接口。
标签: c++ pointers inheritance wrapper