现代编程语言基本上都是面向对象的语言,而这些语言基本上都会使用类体现该思想。本节主要介绍各个语言类的简单定义及语法,复杂的内容后续慢慢介绍。
c的写法
c没有类的定义,可以使用结构体间接实现,这里不做介绍。
c/c++的写法
定义头文件person.h
//定义头文件
class CPerson {
public: //定义可以被任意实体访问变量
int age; //声明成员变量
char name[3];
int getAge(); //声明成员函数
void setAge(int sAge);
char* getName();
void setName(char sName[3]);
};
在main函数中调用类
//引入头文件
#include "person.h"
//初始化成员函数
int CPerson::getAge() {
return age;
}
void CPerson::setAge(int sAge) {
age = sAge;
}
char* CPerson::getName() {
return name;
}
void CPerson::setName(char sName[3]) {
strcpy(name, sName);
}
int main() {
int iRet = -1;
CPerson p; //声明一个对象
p.setAge(20); //给对象的成员变量赋值
char pName[3] = "a";
p.setName(pName);
cout << "age is " << p.getAge() << endl;
cout << "name is " << p.getName() << endl;
}
java的写法
定义JPerson.java文件
//定义类
public class JPerson {
public int age; //声明成员变量
public String name;
public void setAge(int age) { //声明成员函数
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
调用类
public class JPersonMain {
public static void main(String[] args) {
JPerson jPerson = new JPerson(); //初始化类
jPerson.setAge(20); //为成员变量赋值
jPerson.setName("a");
System.out.println(String.valueOf(jPerson.getAge())); //获得成员变量值
System.out.println(String.valueOf(jPerson.getName()));
}
}
go的写法
func main() {
classDemo1()
}
//go中没有类的概念,但是可以通过将struct和方法进行结合实现类的功能
type GPerson struct {
Age int
Name string
}
//定义方法,注意此处和函数的不同
func (p GPerson)printAge() {
fmt.Println(p.Age)
}
func (p GPerson)printName() {
fmt.Println(p.Name)
}
func classDemo1() {
p := GPerson{20, "a"} //初始化struct,并为变量赋值
p.printAge() //调用相关的方法
p.printName()
}
python的写法
# 定义类
class Person:
def __init__(self, name, age): # 声明成员变量
self.name = name
self.age = age
def pring_name_age(self): # 定义成员函数
print(self.age)
print(self.name)
if __name__ == "__main__":
p = Person("a", 20) # 声明并初始化类
p.pring_name_age() # 调用类方法
总结对比:
1. c和go没有类的概念。go可以使用结构体和方向实现类的功能;
2. c++、java和python都可以实现类,过程较为类似。类的变量作用范围以及成员变量的默认值等细节后面章节讨论。