C++ Classes & Objects
C ++编程的主要目的是为C编程语言添加面向对象,类是C ++的核心特性,支持面向对象的编程,通常称为用户定义类型。
类用于指定对象的形式,它将数据表示和方法组合在一起,以便将数据操作到一个整齐的包中。 类中的数据和函数称为类的成员。
C++ Class Definitions
定义类时,可以为数据类型定义蓝图。 这实际上并没有定义任何数据,但它确实定义了类名的含义,即类的对象将包含什么以及可以对这样的对象执行什么操作。
类定义以关键字class开头,后跟类名; 和一个由一对花括号括起来的类体。 类定义必须遵循分号或声明列表。 例如,我们使用关键字class定义Box数据类型,如下所示 -
class Box {
public:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
关键字public确定其后面的类成员的访问属性。 可以在类对象范围内的任何位置从类外部访问公共成员。 您还可以将类的成员指定为private或protected ,我们将在子节中讨论。
定义C ++对象
类提供对象的蓝图,因此基本上是从类创建对象。 我们声明一个类的对象与我们声明基本类型变量的声明完全相同。 以下语句声明了Box类的两个对象 -
Box Box1; // Declare Box1 of type Box
Box Box2; // Declare Box2 of type Box
Box1和Box2这两个对象都有自己的数据成员副本。
访问数据成员
可以使用直接成员访问运算符(。)访问类对象的公共数据成员。 让我们尝试下面的例子来说清楚事情 -
#include <iostream>
using namespace std;
class Box {
public:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
int main() {
Box Box1; // Declare Box1 of type Box
Box Box2; // Declare Box2 of type Box
double volume = 0.0; // Store the volume of a box here
// box 1 specification
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;
// box 2 specification
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;
// volume of box 1
volume = Box1.height * Box1.length * Box1.breadth;
cout << "Volume of Box1 : " << volume <<endl;
// volume of box 2
volume = Box2.height * Box2.length * Box2.breadth;
cout << "Volume of Box2 : " << volume <<endl;
return 0;
}
编译并执行上述代码时,会产生以下结果 -
Volume of Box1 : 210
Volume of Box2 : 1560
请务必注意,无法使用直接成员访问运算符(。)直接访问私有成员和受保护成员。 我们将了解如何访问私有和受保护的成员。
详细的类和对象
到目前为止,您已经对C ++类和对象有了非常基本的了解。 还有一些与C ++类和对象相关的有趣概念,我们将在下面列出的各个子部分中讨论这些概念 -
Sr.No | 概念与描述 |
---|---|
1 | class成员职能 类的成员函数是一个函数,它在类定义中的定义或原型与任何其他变量一样。 |
2 | Class Access Modifiers 类成员可以定义为public,private或protected。 默认情况下,成员将被视为私有。 |
3 | 构造函数和析构函数 类构造函数是类中的特殊函数,在创建类的新对象时调用该类。 析构函数也是一个特殊函数,在删除创建的对象时调用。 |
4 | 复制构造函数 复制构造函数是一个构造函数,它通过使用先前创建的同一类的对象初始化它来创建对象。 |
5 | Friend Functions 允许friend函数完全访问类的私有和受保护成员。 |
6 | 内联函数 使用内联函数,编译器会尝试扩展函数体中的代码,而不是调用函数。 |
7 | 这个指针 每个对象都有一个特殊的指针,指向对象本身。 |
8 | 指向C ++类的指针 指向类的指针与指向结构的指针完全相同。 实际上,一个类实际上只是一个包含函数的结构。 |
9 | 静态成员 类的数据成员和函数成员都可以声明为static。 |