【发布时间】:2014-11-24 15:46:20
【问题描述】:
我正在将一些 Java 代码转换为 C++,并且我希望保持类结构相似。但是,我遇到了以下问题,我不知道如何解决; 我在 Java 中这样做:
public class Mother {
protected Father make;
public Mother(){
make = maker();
make.print(); };
public Father maker(){
return new Father();};}
public class Daughter extends Mother {
public Daughter(){
super();}
@Override
public Father maker(){
return new Son();};}
public class Father {
public void print(){
System.out.println("I am the Father!\n");}}
public class Son extends Father {
@Override
public void print(){
System.out.println("I am the son!\n");};}
public static void main(String[] args) {
Daughter dot = new Daughter();
}
将产生:我是儿子! 而:
class father{
public:
virtual void print(){
std::cout << "I am the father!\n";
}; };
class son: public father{
public:
virtual void print(){
std::cout << "I am the son!\n";
};};
class mother{
protected:
father *make;
public:
mother(){
make = maker();
make->print();
};
virtual father *maker(){
return new father();
};};
class daughter: public mother{
public:
daughter(): mother() {
};
virtual father *maker(){
return new son();
};};
int main(int argc, const char * argv[]) {
daughter *d = new daughter();
会产生我是父亲!。 如何使 C++ 代码产生与 Java 代码相同的结果?谢谢。
【问题讨论】:
-
“我正在将一些 Java 代码转换为 C++,我希望保持类结构相似。”这是一个坏主意。
-
Java 不是 C++,一般来说,利用您对外观相似的语言的了解来编写 C++ 代码并不是一个好主意。仅仅因为一个看起来像另一个并不意味着您可以随意进行逐行编码更改。从答案中可以看出,规则是不同的。您还缺少基类的虚拟析构函数,更不用说在您的示例中存在内存泄漏(在 C++ 中使用
new与 Java 不同)。
标签: java c++ polymorphism factory