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