[疑难] 请问D语言有没有静态成员函数?

yntcsb 2009-04-19
张雪平翻译的《D语言编程参考手册》中提到了D语言的静态构造函数,但如何构造却没有讲清楚。
另外,有时我们需要一个静态成员函数。比如一个学生类,我们用一个静态成员来记录所有已创建的学生对象个数。要得到学生类的对象创建了多少,如果用一般成员函数的话,必须要绑定一个学生对象才能获取学生对象创建的个数。C++中有静态成员函数,不需要绑定一个学生对象,用类名引导就能获取学生对象的个数。不知D语言中有没有实现类似的功能的成员函数,又如何操作。
oldrev 2009-04-19
文档里都有
yntcsb 2009-04-20
引用
文档里都有


你指的是哪篇文档。
oldrev 2009-04-20
http://www.digitalmars.com/d/2.0/class.html#member-functions

我也是够闲的
yntcsb 2009-04-20
引用
oldrev 7 小时前
http://www.digitalmars.com/d/2.0/class.html#member-functions

我也是够闲的 

好象文档说的是静态构造和静态析构,并非静态成员函数。
yntcsb 2009-04-20

初步解决,如下例:

 

 

//静态成员函数
module staticMember;
import tango.io.Stdout;

class Student{
    private:
    static int number;//静态成员数据
    char[] name;

    public:
    this(char[] str){
        name = str;
        ++number;
    }

    void print(){
        Stdout.formatln("当前学生是{},共有学生{}个。",name,number);
    }
//静态成员函数
    static int getNumber(){
        return number;
    }
}


void fn(){
    Student s1 = new Student("Jenny");
    Student s2 = new Student("Randy");

    //静态成员函数可以像普通成员函数一样通过捆绑对象调用
    Stdout("Student的总数有")(s1.getNumber)("个").newline;
    s2.print();
    s1.print();
}

int main(){
    Student s = new Student("Smith");//此处创建了一个学生对象
    fn();//此处创建了两个学生对象

    //静态成员函数可以用类名引导调用,这样做的好处是不需要为了查看该类的静态数据而专门创建一个对象
    Stdout("Student的总数有")(Student.getNumber())("个").newline;

    return 0;
}

 

Global site tag (gtag.js) - Google Analytics