【问题标题】:How to point the child class pointer to the base class pointer? [duplicate]如何将子类指针指向基类指针? [复制]
【发布时间】:2019-09-13 18:41:28
【问题描述】:
class A {
public:
    void show() {
        cout << "Class A Show"<<'\n';
    }
};

class C : public A {
public:
    void show() {
        cout << "Class C Show" << '\n';
    }
};

int main()  //first int main()
{
    C* a = new C;  //line 1
    a->show();     //line 2
    a = new A(); //line 3
    a->show();   //line 4
}

int main()  //2nd int main()
{
    A* a = new C;  //line 1
    a->show();     //line 2
    a = new A(); //line 3
    a->show();   //line 4
}

问题:

在两个int main()中分别输出朗姆时的每一行

错误 “A*”类型的值不能分配给“C*”类型的值

我遇到了一个面试问题,小组询问了上述 2 int mains() 的输出,并询问它是否会产生错误,而不是我们如何忽略该错误。我在编译器上尝试了这段代码,错误出现在 First int main() 的第 3 行,而 2nd int main() 运行时没有出现错误

【问题讨论】:

  • 你有什么问题?
  • a 的第一个主要类型是C*,因为你不能在那里存储A*,因为C 派生自A,反之亦然
  • O 我怎样才能消除这个错误
  • 如果问题是如何消除错误,答案是修复代码
  • 我们知道每条鲱鱼都是一条鱼,但并非每条鱼都是一条鲱鱼。你有两个班,鱼班和鲱鱼班。 (1) 它们之间的自然关系是什么? (a) Fish 继承 Herring (b) Herring 继承 Fish (c) a 和 b (d) 既不是 a 也不是 b?为什么? (2)给定(1)的答案和这两个陈述Fish* fish = new Herring; Herring* herring = new Fish;哪个是正确的? (a) 第一个 (b) 第二个 (c) 两者 (d) 都不是?为什么?

标签: c++ class inheritance


【解决方案1】:

C++ 是一种严格类型的语言,因此您不能将一种类型的值分配给另一种类型的值。指向不同类型的指针是不同的类型。存在可以隐式转换的兼容类型的概念,但指向不同类型的指针不是其中之一。

现在允许将派生类的指针分配给基类的指针。从抽象的角度来看,如果类型 A 的类子对象是类类型 A 的对象。这种分配是类型擦除范式的一部分。但是相反是不可能的,因为A型不是C型。

【讨论】:

    猜你喜欢
    • 2015-08-12
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多