D 编程 - 类与对象



类是 D 编程的核心特性,支持面向对象编程,通常被称为用户定义类型。

类用于指定对象的结构,它将数据表示和操作该数据的方法组合成一个简洁的包。类中的数据和函数称为类的成员。

D 类定义

当您定义一个类时,您定义了一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类名的含义,即类对象将包含什么以及可以对这样的对象执行哪些操作。

类定义以关键字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确定其后跟随的类成员的访问属性。公共成员可以在类对象的范围内从类外部访问。您还可以将类的成员指定为privateprotected,我们将在下一节中讨论。

定义 D 对象

类为对象提供蓝图,因此基本上对象是从类创建的。您使用与声明基本类型变量完全相同的声明来声明类对象。以下语句声明了两个 Box 类的对象:

Box Box1;          // Declare Box1 of type Box 
Box Box2;          // Declare Box2 of type Box 

Box1 和 Box2 这两个对象都有自己数据成员的副本。

访问数据成员

可以使用直接成员访问运算符 (.) 访问类对象的公共数据成员。让我们尝试以下示例来使事情更清楚:

import std.stdio;

class Box { 
   public: 
      double length;   // Length of a box 
      double breadth;  // Breadth of a box 
      double height;   // Height of a box 
}
  
void main() { 
   Box box1 = new Box();    // Declare Box1 of type Box 
   Box box2 = new Box();    // 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; 
   writeln("Volume of Box1 : ",volume);
   
   // volume of box 2 
   volume = box2.height * box2.length * box2.breadth; 
   writeln("Volume of Box2 : ", volume); 
} 

当以上代码编译并执行时,会产生以下结果:

Volume of Box1 : 210 
Volume of Box2 : 1560 

需要注意的是,私有和受保护的成员不能直接使用直接成员访问运算符 (.) 访问。稍后您将学习如何访问私有和受保护的成员。

D 中的类和对象

到目前为止,您已经对 D 类和对象有了非常基本的了解。还有更多与 D 类和对象相关的有趣概念,我们将在下面列出的各个子部分中进行讨论:

序号 概念及描述
1 类成员函数

类成员函数是在类定义中定义或其原型与任何其他变量一样位于类定义中的函数。

2 类访问修饰符

类成员可以定义为 public、private 或 protected。默认情况下,成员将被假定为 private。

3 构造函数和析构函数

类构造函数是类中的一种特殊函数,在创建类的新的对象时被调用。析构函数也是一种特殊函数,在创建的对象被删除时被调用。

4 D 中的 this 指针

每个对象都有一个特殊的指针this,它指向对象本身。

5 指向 D 类的指针

指向类的指针与指向结构体的指针完全相同。实际上,类实际上只是一个包含函数的结构体。

6 类的静态成员

类的成员数据和成员函数都可以声明为静态的。

广告