📅  最后修改于: 2023-12-03 15:14:03.492000             🧑  作者: Mango
在面向对象的程序设计中,基类和派生类是重要的概念。基类是派生类的父类,派生类继承了基类的所有成员,同时也可以添加自己的成员。
在C++中,定义基类可以使用class或struct关键字,如下:
class Base {
public:
int a;
void func() {
// some code here
}
};
派生类可以通过继承基类来定义,使用冒号后接基类名,如下:
class Derived : Base {
public:
int b;
void foo() {
// some code here
}
};
注意,这里使用了public关键字来指定继承基类后的访问权限。还有一些其他的关键字,如private和protected,表示派生类对基类的继承权限不同。这里我们简单介绍public关键字的用法。
派生类继承了基类的所有成员变量和成员函数,而且派生类可以定义自己的成员变量和成员函数。
例如,上面的Derived类继承了Base类的a变量和func()函数,同时定义了自己的b变量和foo()函数。
派生类是基类的扩展,也可以说是基类的一个特殊情况。因此,可以使用指向派生类对象的指针来访问基类成员,但是反之不行。
例如:
Base* p = &d;
int x = p->a; // 正确,访问Base类的a成员
int y = p->b; // 错误,Derived类独有的成员不能通过Base类对象访问
派生类在创建对象时会调用基类的构造函数,以初始化基类的成员变量。派生类也可以定义自己的构造函数和析构函数,以初始化和清理自己的成员变量。
例如:
class Derived : Base {
public:
int b;
Derived(int _a, int _b) : Base(_a), b(_b) {
// some code here
}
~Derived() {
// some code here
}
};
这里的构造函数和析构函数分别初始化和清理Derived类的成员变量b。
基类和派生类之间还有一个重要的概念,叫做多态性。这个概念非常复杂,这里我们简单介绍一下。
多态性是指,在面向对象的程序设计中,父类指针可以指向子类对象,并且根据具体的类型,调用对应的函数。这是面向对象的程序设计中最具有灵活性和扩展性的特征之一。
例如:
class Base {
public:
virtual void func() {
// some code here
}
};
class Derived : Base {
public:
void func() override {
// some code here
}
};
void doSomething(Base* p) {
p->func(); // 多态调用
}
int main() {
Base* p1 = new Base();
Base* p2 = new Derived();
doSomething(p1); // 调用Base类的func()函数
doSomething(p2); // 调用Derived类的func()函数
delete p1;
delete p2;
return 0;
}
这里我们使用了虚函数和多态性来实现了父类指针指向子类对象,并且根据具体的类型,调用对应的函数。这是面向对象的程序设计中最具有灵活性和扩展性的特征之一。
基类和派生类是面向对象程序设计中非常重要的概念。它们之间的关系非常紧密,派生类可以继承基类的成员变量和成员函数,同时也可以添加自己的成员变量和成员函数。此外,基类和派生类之间还有一些区别,比如继承关系、构造函数和析构函数等。最重要的区别是多态性,它是面向对象程序设计中最具有灵活性和扩展性的特征之一。