📅  最后修改于: 2023-12-03 15:13:45.257000             🧑  作者: Mango
在 C++ 中,继承是重用已有代码的一种方式。子类可以从父类中继承(或派生)属性和方法,然后根据需要进行修改或添加新的特性。
继承分为不同类型,包括公有继承、私有继承和受保护的继承。在这个问题中,我们将讨论公有继承和私有继承的差异。
当使用公有继承时,子类可以访问父类的公有成员和保护成员。私有成员则不可访问。
下面是一个使用公有继承的示例代码:
class Animal {
public:
void eat() {
cout << "Animal is eating.\n";
}
};
class Dog : public Animal {
public:
void bark() {
cout << "Dog is barking.\n";
}
};
int main() {
Dog myDog;
myDog.eat(); // 可以访问父类的 eat() 方法
myDog.bark(); // 可以访问子类的 bark() 方法
return 0;
}
可以看到,在上面的示例中,子类 Dog
继承了父类 Animal
的 eat()
方法,并添加了自己的 bark()
方法。在 main()
函数中,可以通过 myDog.eat()
访问 Animal
类的 eat()
方法。
当使用私有继承时,子类可以访问父类的公有成员和保护成员,但这些成员均将变成子类的私有成员,因此在子类中这些成员无法再被访问。
下面是一个使用私有继承的示例代码:
class Animal {
public:
void eat() {
cout << "Animal is eating.\n";
}
};
class Dog : private Animal {
public:
void bark() {
cout << "Dog is barking.\n";
}
};
int main() {
Dog myDog;
myDog.eat(); // 编译错误,无法访问私有的 Animal::eat() 方法
myDog.bark(); // 可以访问子类的 bark() 方法
return 0;
}
可以看到,在上面的示例中,子类 Dog
私有继承了父类 Animal
,因此 myDog.eat()
会导致编译错误。只有 Dog
的成员函数可以访问 Animal
类的公有成员和保护成员。
公有继承和私有继承的主要区别在于可访问性。公有继承可以访问父类的公有成员和保护成员,私有继承仅限于子类的成员函数访问。选择哪种继承类型取决于具体情况和设计需求。