C++私有继承(一)
C++中的继承分为公有继承、私有继承和受保护继承。本文主要介绍私有继承的用法和示例。
什么是私有继承
私有继承表示继承的成员在该类的外部是不可见的。这意味着,无法通过基类的指针或引用访问派生类从基类继承的成员。私有继承是一种is-a关系,表示派生类是基类的一种类型。
私有继承的语法
私有继承的语法为:
class BaseClass {
// 基类成员
};
class DerivedClass : private BaseClass {
// 派生类成员
};
在上面的代码中,我们使用了private关键字来表示私有继承。
私有继承的示例
下面的代码演示了私有继承的用法和示例。
#include <iostream>
class Animal {
public:
void eat() {
std::cout << "Animal eat" << std::endl;
}
void drink() {
std::cout << "Animal drink" << std::endl;
}
};
class Dog : private Animal {
public:
void bark() {
std::cout << "Dog bark" << std::endl;
}
};
int main() {
Dog dog;
// 正确,调用Dog的成员函数
dog.bark();
// 错误,Dog从Animal私有继承,基类成员不可见
dog.eat();
// 错误,Dog从Animal私有继承,基类成员不可见
dog.drink();
return 0;
}
在上面的代码中,我们定义了一个基类Animal,它有两个成员函数eat()和drink()。然后我们定义一个派生类Dog,使用private关键字表示私有继承。派生类Dog新增了一个成员函数bark()。当我们尝试访问派生类Dog继承自基类Animal的成员函数时,由于私有继承的限制,编译器会报错,这就是私有继承的用法了。
下面再看一段代码:
#include <iostream>
class Animal {
private:
int legs;
public:
Animal(int num_legs) {
legs = num_legs;
}
int get_legs() {
return legs;
}
};
class Dog : private Animal {
private:
int age;
public:
Dog(int dog_age) : Animal(4) {
age = dog_age;
}
void bark() {
std::cout << "Dog bark" << std::endl;
}
int get_age() {
return age;
}
};
int main() {
Dog dog(3);
std::cout << "Dog age: " << dog.get_age() << std::endl;
std::cout << "Dog legs: " << dog.get_legs() << std::endl;
return 0;
}
在上面的代码中,我们定义了一个基类Animal,封装了私有成员legs,并且定义了构造函数和成员函数get_legs()。然后我们定义了一个派生类Dog,使用private关键字表示私有继承。派生类Dog新增了一个成员变量age和一个成员函数bark()。我们在Dog的构造函数中,调用了基类Animal的构造函数,并传入了4作为形参。然后在main函数中,我们创建了一个Dog对象,并分别访问了派生类Dog的成员函数和基类Animal的成员函数。
结论
私有继承表示继承的成员在该类的外部是不可见的,无法通过基类的指针或引用访问派生类从基类继承的成员。私有继承是一种is-a关系,表示派生类是基类的一种类型。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++私有继承(一) - Python技术站