Carbon语言 类与对象
Carbon 支持面向对象编程。类是 Carbon 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类被称为类的成员。
1. 类与对象
class Point { var x: i32; var y: i32; } fn Main() -> i32 { var p1: Point = {.x = 1, .y = 2}; var p2: auto = p1; p2.x = 3; return p1.x - 1; }
2. 成员变量与成员函数
class NewsAriticle { // 类似C++的static fn Make(headline: String, body_html: String) -> NewsAritcle(); // 只读方法 fn AsHtml[me: Self]() -> String; // 可修改方法 fn Publish[addr me: Self*]() { me->published = DateTime.Now(); } private var headline: String; private var body_html: String; private var published: Optional(Datetime); } // 类外定义成员函数 fn NewsAriticle.AsHtml[me: Self]() -> String{ ... }
Carbon 中类中成员访问控制权限默认都是 public,如果需要声明成私有则需要单独加 private 关键字。这个行为和 C/C++ 的 struct 相同,但是和主流语言的 class 都不同。 定义在类中的函数,如果有[me: Self]表示是只读的成员函数,在函数中不能修改类对象的成员变量。me在函数体中是表示对当前对象的引用,类似 C++的(*this)。 如果有[addr me: Self*]表示的是可对当前对象进行修改的函数。me在函数体中类似 C++ 的 this 指针。 [me: Self]或[addr me: Self*]的成员函数,也可以称作方法(method),如果类中的函数没有[me: Self]或[addr me: Self*],则表示是一个和对象无关的函数,等价于C++中的static成员函数。这个设计很像python中的类中成员函数的设计。
Carbon只支持单继承,不支持多重继承。值得注意的是普通的class关键字定义的类型默认都是final的,即不能被继承生成子类。但 abstrct class 和 base class 关键字定义的类型可以被 ...