C++中的基类和派生类的区别

C++中的基类和派生类的区别

C++中,基类和派生类是面向对象编程中常用的概念。面向对象编程(OOP)是一种计算机编程范例,它是通过模拟“对象”概念而实现的编程方法。在OOP中,对象是类的实例,类是对对象的抽象描述,它们是构建程序结构的基本单元。

基类

C++中,基类是一个类的“父类”,具有被派生类所继承的属性和方法。基类定义了一个基本的模板,它是派生类的基础。基类可以被视为一种抽象或者基础类,其他的类可以通过继承基类的方法来实现一些基础性的操作。

以下是一个简单的例子,它演示了如何定义一个基类:

#include <iostream>
using namespace std;

class Shape {
    public:
        void setWidth(int w) {
            width = w;
        }
        void setHeight(int h) {
            height = h;
        }

    protected:
        int width;
        int height;
};

int main() {
    Shape shape;
    shape.setWidth(10);
    shape.setHeight(20);

    return 0;
}

在这个例子中,我们定义了一个名为Shape的基类,它有两个变量width和height,然后写了两个函数来设置这些变量。在主函数中,我们实例化了这个基类,并设置了它的宽度和高度。这是一个非常简单的例子,但足以说明基类的概念。

派生类

派生类是从基类中派生出来的新类,它可以继承基类的属性和方法,并且可以添加自己的属性和方法。派生类可以继承一个或多个基类,从而使代码更加灵活。

以下是一个简单的例子,它演示了如何定义一个派生类:

#include <iostream>
using namespace std;

class Shape {
    public:
        void setWidth(int w) {
            width = w;
        }
        void setHeight(int h) {
            height = h;
        }

    protected:
        int width;
        int height;
};

class Rectangle: public Shape {
    public:
        int getArea() {
            return (width * height);
        }
};

int main() {
    Rectangle rect;
    rect.setWidth(10);
    rect.setHeight(20);

    cout << "Total area: " << rect.getArea() << endl;

    return 0;
}

在这个例子中,我们定义了一个名为Rectangle的派生类,它从基类Shape中继承了setWidth和setHeight函数,并添加了一个getArea函数,用来计算矩形的面积。在主函数中,我们实例化了这个派生类,并设置了它的宽度和高度,然后在屏幕上输出了它的面积。

区别

基类和派生类之间最明显的区别是它们的继承关系。基类是派生类的父类,派生类直接继承了基类的所有属性和方法。派生类还可以添加自己的属性和方法,以扩展基类的功能。

除此之外,基类和派生类的许多特性都是相同的。例如,它们都可以被用作参数或返回值,它们都可以实例化,它们都可以有构造函数和析构函数,等等。

示例代码

以下是一个更复杂的示例代码,它演示了基类和派生类的更多特性:

#include <iostream>
using namespace std;

class Shape {
    public:
        Shape() {
            cout << "Shape constructor." << endl;
        }
        ~Shape() {
            cout << "Shapedestructor." << endl;
        }
        void setWidth(int w) {
            width = w;
        }
        void setHeight(int h) {
            height = h;
        }

    protected:
        int width;
        int height;
};

class Rectangle: public Shape {
    public:
        Rectangle() {
            cout << "Rectangle constructor." << endl;
        }
        ~Rectangle() {
            cout << "Rectangle destructor." << endl;
        }
        int getArea() {
            return (width * height);
        }
};

int main() {
    Rectangle rect;
    rect.setWidth(10);
    rect.setHeight(20);

    cout << "Total area: " << rect.getArea() << endl;

    return 0;
}

在这个例子中,我们添加了Shape和Rectangle的构造函数和析构函数。构造函数是类的特殊方法,用于在对象创建时初始化对象的属性。析构函数是类的特殊方法,用于在对象销毁(即程序结束)时释放对象的资源。在主函数中,我们实例化了这个派生类,并设置了它的宽度和高度,然后在屏幕上输出了它的面积。输出的结果如下:

Shape constructor.
Rectangle constructor.
Total area: 200
Rectangle destructor.
Shape destructor.

输出结果表明,在程序执行期间,首先创建了基类Shape对象,随后创建了派生类Rectangle对象,然后执行了计算函数getArea,最后先销毁了派生类Rectangle对象,再销毁了基类Shape对象。

结论

在C++中,基类和派生类是面向对象编程的重要概念。基类是一个类的“父类”,派生类是从基类中派生出来的新类。基类和派生类的区别在于它们的继承关系和扩展能力。基类有一个基本的模板,派生类可以继承其中的属性和方法,并添加自己的属性和方法,以扩展基类的功能。基类和派生类可以通过构造函数和析构函数来释放内存资源,这是一个极为重要的特性。在编写程序时,我们应该根据实际需要,选择合适的语法来设计基类和派生类的结构,以实现面向对象编程的优点。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程