D语言类和对象 - D语言教程

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

类是用来指定对象的形式,它结合了数据表示和操纵数据成一个整齐的包装方法。类中的数据和函数被称为类的成员。

D编程类的定义:

当定义一个类时,定义了一个数据类型。这实际上并不定义任何数据,但它并定义哪些类名表示,即是什么类的对象将包括与哪些操作可以在这样一个对象来执行。

类定义以关键字class后面的类名开头和类体,由一对花括号括起来。类定义必须要么跟一个分号或声明的列表。例如,我们定义使用关键字class如下框数据类型:

class Box
{
   public:
      double length;   // Length of a box
      double breadth;  // Breadth of a box
      double height;   // Height of a box
}

关键字public确定类跟在它后面的成员的访问属性。公共成员都可以从类的外部访问类对象的范围内的任何地方。也可以指定一个类的成员为private或protected,我们将在一个分节讨论。

定义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

要注意的是私有和受保护成员不能直接使用直接成员访问运算符(.)进行访问是重要的。我们将学习private和protected成员如何可以访问。

类和对象的详细信息:

到目前为止,已经得到了类和对象非常基本的概念。有相关的为D编程中类和对象,我们将在下面列出各个子部分进一步讨论相关的概念:

Concept 描述
类成员函数 一个类的成员函数是一个函数,它有它的定义或像任何其他变量在类定义中它的原型。
类的访问修饰符 类成员可以被定义为public,private或protected。默认情况下,成员将被假定为private。
构造函数和析构函数 类的构造函数是在创建类的新对象时调用类中的特殊功能。析构函数也是一个特殊的功能,当创建的对象被删除时调用。
this指针 每个对象都有一个特殊的指针this,它指向的对象本身。
指针指向类 一个指针,指向类完成完全相同的方式指向一个结构。其实一个类实际上只是一个带有功能结构。
类的静态成员 这两个数据成员和类的成员函数可以被声明为静态。