C++ 类的继承与派生实例详解
一、什么是继承与派生
在面向对象的编程中,继承与派生是两个很重要的概念。通过继承,我们可以在已有的类的基础上,创建一个子类,并且让子类保留父类的功能和特征,然后在子类中再添加自己的功能和特征。这就是继承的意义所在。
派生是继承的一种实现方式。通过派生,子类可以从父类中继承所有的属性和方法,包括公有(public)、私有(private)和保护(protected)的成员。子类可以重载父类的成员函数,也可以添加自己独有的成员函数。
二、C++ 继承与派生详解
1. 基本语法
class ChildClass : access_specifier ParentClass {
// add your children class member here
};
ChildClass
指的是子类,即继承者ParentClass
指的是父类,即被继承者access_specifier
指明了子类可以访问父类的哪些成员,包括public
、protected
和private
三种类型
C++ 中常用的继承方式有三种:
public
继承- 子类继承了父类的公有和保护成员,但是不能访问父类的私有成员。
protected
继承- 子类继承了父类的保护成员,并将它们保护起来,即使是在子类中,也不能像父类那样直接访问它们。
private
继承- 子类继承了父类的私有成员,并将它们继承为私有成员。在子类中,仍然可以访问这些成员,但只能用基类的公有和保护成员来访问。
2. 继承链
假设我们有一个类 A 继承自另外一个类 B,现在又有一个类 C 继承自 A,那么我们就说 “A 是 C 的直接基类” 或 “C 是 A 的直接派生类”;同时,由于类 C 是类 A 的派生类,类 A 又是类 B 的基类,所以我们可以说 “C 是 B 的间接派生类”。这个继承关系形成了一个链条,叫做“继承链”。
3. 多重继承
C++ 还提供了一种更为灵活的继承方式——多重继承。多重继承是指一个类可以同时从多个基类中继承行为和属性。语法格式如下:
class ChildClass : access_specifier ParentClass1, access_specifier ParentClass2 {
// add your children class member here
};
三、示例说明
1. 继承示例
#include <iostream>
class Animal {
public:
std::string type;
int age;
void eat() {
std::cout << "I'm eating!" << std::endl;
}
};
class Dog : public Animal {
public:
std::string name;
void bark() {
std::cout << "I'm barking!" << std::endl;
}
};
int main() {
Dog dog;
dog.type = "dog";
dog.age = 1;
dog.name = "Tommy";
std::cout << "This " << dog.type << " is " << dog.age << " years old." << std::endl;
dog.bark();
dog.eat();
return 0;
}
在上面的示例中,我们定义了一个 Animal
类,再从 Animal
类中派生出一个 Dog
类。在 Dog
类中,我们添加了独有的 name
成员和 bark()
成员函数,并继承了 Animal
类的 type
成员和 eat()
成员函数。
2. 多重继承示例
#include <iostream>
class Base1 {
public:
void func1() {
std::cout << "Base1->func1()" << std::endl;
}
};
class Base2 {
public:
void func1() {
std::cout << "Base2->func1()" << std::endl;
}
};
class Derived : public Base1, public Base2 {
public:
void func2() {
std::cout << "Derived->func2()" << std::endl;
}
};
int main() {
Derived derived;
derived.func1(); // 输出 Base1->func1()
derived.Base2::func1(); // 输出 Base2->func1()
derived.func2(); // 输出 Derived->func2()
return 0;
}
在上面的示例中,我们定义了两个基类 Base1
和 Base2
,然后从这两个基类中派生出一个继承类 Derived
。在 Derived
类中,我们添加了独有的成员函数 func2()
。
在 main()
函数中,我们首先创建了一个 Derived
类的对象 derived
,然后调用了它所继承的类中的成员函数。由于 Derived
类同时继承自两个基类,因此当 Derived
类中的 func1()
函数被调用时,就会发生二义性问题。我们需要使用作用域解析运算符(::)来指明调用哪个基类中的成员函数。
综上,在 C++ 的类的继承与派生过程中,遵循基本语法和规范,可以通过继承和派生的方式实现代码的灵活性和高效性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 类的继承与派生实例详解 - Python技术站