我尝试从另一个类复制一个构造函数。这两个类在同一文件中。我目前收到的错误是:
错误:没有匹配的函数可以调用B :: B(A&)
主文件的片段:
#include "file.h"
// create the objects
A object1(1000000, 5);
B object2(object1);
file.cpp的片段:
class A {
public:
A::A(uint32_t one, uint32_t two) { }
};
class B : public A {
public:
B::B(const B ©) : A(copy) { }
}
};
头文件中的片段。
class B : public A {
public:
B(const B&);
我试图使代码对于stackoverflow尽可能简单。有人可以解释一下这里出了什么问题吗?
答案 0 :(得分:5)
您的B :: B(const B&)期望引用const B,但是您提供的是A的实例。即使每个B都是-a A,反之亦然。实际上,object1是-a A,但不是-a B。
更多说明:如果希望B可从A构造,则需要提供一个采用A的构造函数,例如:B::B(const A& copyA): A(copyA) {}
答案 1 :(得分:2)
李斯科夫替代原则维基页面上说:
可替代性是面向对象编程中的一项原则,其中指出 在计算机程序中,如果S是T的子类型,则对象 类型T可以替换为类型S的对象(即类型为对象的对象) T可以用子类型S)的任何对象代替,而无需更改 程序的任何理想属性(正确性,任务 等等)。
您可以使用B的对象代替A的对象,但不能反向使用。