C++

C++ 知识量:19 - 82 - 316

15.2 基类和派生类><

基类- 15.2.1 -

C++中的基类是定义一个类的基础,它包含了一组方法和属性,这些方法和属性可以被派生类继承和重写。以下是一个简单的C++基类的示例:

class BaseClass {  
public:  
    // 公共成员函数  
    void publicFunction() {  
        // 实现公共函数  
    }  
  
protected:  
    // 保护成员函数和变量  
    int protectedVariable;  
  
private:  
    // 私有成员函数和变量  
    int privateVariable;  
};

在这个示例中,BaseClass是一个基类,它包含了三个成员函数和两个成员变量。其中,publicFunction()是一个公共成员函数,可以被派生类继承和重写;protectedVariable和privateVariable分别是保护成员变量和私有成员变量,它们的访问权限分别受到保护和限制。

除了成员函数和成员变量之外,基类还可以定义构造函数、析构函数、虚函数等。其中,构造函数用于初始化对象的状态,析构函数用于释放对象占用的资源,虚函数用于实现多态性。

派生类- 15.2.2 -

C++中的派生类(Derived class)是从基类(Base class)派生出来的类。派生类继承了基类的所有成员变量和成员函数,并且可以在派生类中添加新的成员变量和成员函数,或者覆盖基类中的成员函数。

以下是创建一个派生类的基本语法:

class Base {  
  // 基类的成员变量和成员函数  
};  
  
class Derived : public Base {  
  // 派生类的成员变量和成员函数  
};

在这个例子中,Derived 是从 Base 类派生出来的。关键字 public 指定了派生方式为公有继承,这意味着基类的公有成员在派生类中也是公有的。如果没有指定派生方式,则默认为私有继承。

派生类可以使用基类的成员函数,也可以重写基类的成员函数。如果派生类想要使用基类的成员函数,可以使用 base 关键字来引用基类的成员函数,例如:

class Base {  
public:  
  void foo() {  
    // do something  
  }  
};  
  
class Derived : public Base {  
public:  
  void foo() override {  
    // do something else  
    Base::foo(); // 调用基类的 foo() 函数  
  }  
};

在这个例子中,Derived 类重写了 Base 类的 foo() 函数,并且在派生类的 foo() 函数中调用了基类的 foo() 函数。关键字 override 表示这个函数是覆盖基类的成员函数。

继承- 15.2.3 -

C++中的继承是一种面向对象编程中的基本概念,它允许在一个类中定义新的类,并且新类可以继承原有类的属性和方法。通过继承,可以创建更加复杂和可重用的对象模型。

在C++中,继承可以使用关键字extends或者 :来声明。例如,可以定义一个基类Person和一个派生类Student,其中Student继承了Person的所有成员变量和成员函数:

class Person {  
  protected:  
    string name;  
    int age;  
  public:  
    void setName(string n) { name = n; }  
    void setAge(int a) { age = a; }  
    string getName() { return name; }  
    int getAge() { return age; }  
};  
  
class Student : public Person {  
  private:  
    string school;  
  public:  
    void setSchool(string s) { school = s; }  
    string getSchool() { return school; }  
};

在这个例子中,Student继承了Person的所有公有成员变量和成员函数,并且添加了一个新的私有成员变量school。可以使用extends关键字来声明继承关系:

class Student extends Person {  
  // ...  
};

除此之外,还可以使用组合来实现继承。组合是指将一个类的对象作为新类的成员变量。例如,可以定义一个Person类和一个Student类,其中Student对象包含一个Person对象:

class Person {  
  protected:  
    string name;  
    int age;  
  public:  
    void setName(string n) { name = n; }  
    void setAge(int a) { age = a; }  
    string getName() { return name; }  
    int getAge() { return age; }  
};  
  
class Student {  
  private:  
    Person person; // Person对象作为Student类的成员变量  
    string school;  
  public:  
    void setPerson(Person p) { person = p; }  
    void setSchool(string s) { school = s; }  
    Person getPerson() { return person; }  
    string getSchool() { return school; }  
};

在这个例子中,Student对象包含一个Person对象,并且添加了一个新的私有成员变量school。