c++,类的继承问题

2024-12-19 03:44:58
推荐回答(1个)
回答1:

Line和Point是两个类,所以你的length不能直接存取Point的非公有成员(除非是在子类)。但是这里你错误地认为,继承后就可以存取p1对象的x。这里Line可以存取的只是基类Point中的x,所以以下代码是可以编译的:

float length() const
{
    return sqrt(x * x, y * y); // 注意,这里没有使用p1.x,因为p1.x是非公有的
}

再有,从Point继承来实现Line本身这个想法有问题,公有继承一般情况下需要符合Liskov替换原则(当然有时候我们不一定能够完全做到,但是尽量符合这个原则)。你可以定义Line不从Point继承。