C++之类
什么是类?
类定义了数据成员与函数成员;其中数据成员用于存储与该类的对象相关联的状态、而函数成员则负责执行一些有意义的操作(这些操作可能是更改类类型对象的数据成员的状态、或者其余一些操作)。我们可以通过类分离接口与实现,也就是说对象有什么具体的执行过程可以与接口的定义相分离。如:
class Car{
int money; //价值
int speed; //速度
string material; //材料
int getSpeed();//获取车速
string getMaterial();//获取材质
};
而具体的实现代码则如下:Car::Car(){
money = 1000,000;
}
int Car::getSpeed(){
return 300;
}
string getMaterial(){
return "Al";
}
//这样我们就将类的实现与接口进行了分离
类类型我们也称之为:抽象数据类型(ADT)。抽象数据类型将数据和操作这些数据的方法作为一个整体。当定义一个类是,我们可以只考虑类该做什么,但是无需考虑到底应该怎么做?怎么样才能完成这些操作?。因此,不难得出抽象数据类型是面向对象编程的基础。定义类
class Person{
public:
int age; //年龄
string name; //名字
int tall; //身高
string hobby;//爱好
}; //类必须以分号“;”结尾,不同于C#中的类,在C#中类可以不以分号结尾
类的成员
每一个类可以没有成员(包括数据成员、函数成员或者其他类类型的成员),当然了,也可以包含多个数据成员、函数成员、类类型的成员。
一个类可以包含多个设置了访问权限的部分,访问权限分为:public、protected、private.
区别如下:
public protected private 本类、派生类成员类中、类外都可以访问,没权限问题 本类、派生类成员中可以访问,类外成员无法访问 只有本类成员可以类中访问
所有的类成员必须在类中声明,类声明完成后,无法再添加类成员了。
每一个访问权限标号的作用范围为本标号开始到下一个标号或者类的结尾分号。
构造函数
创建一个类对象时,编译器会自动的调用一个构造函数来初始化对象。构造函数是一个特殊的、与类同名的成员函数,用来初始化类类型的数据成员。构造函数没有返回值。构造函数用来初始化类类型数据成员的方法有两种:
- 使用构造函数体的赋值方式
- 使用构造函数初始化列表的方式来初始化数据成员
如:
构造函数体方式:
Person::Person(){ age = 22; name = "Josin"; tall = 170; hobby = "Computer"; }
构造函数初始化列表:
Person::Person():age(22),name("Josin"), tall(170), hobby("Computer"){ }
成员函数
类我们在上文中说明了是一种抽象数据类型,因此我们定义类类型时只定义不实现具体的操作,如果在定义类类型的同时也实现了类的操作,那么编译器会将此成员函数当作:inline函数。
类成员函数中编译器附加一个隐含的实参:this;this指向当前类类型的实例(类对象)。
类类型的普通函数可以修改类类型的数据成员,如果用户不想要修改类类型的数据成员,那么声明类类型成员函数为:const成员函数,const关键字表明类成员函数无法修改类类型的数据成员。
const关键字必须出现在声明与实现中:
class Person{ public: Person(); string name; string getName() const; //const关键字在声明中 }; string Person::getName() const{ //const关键字在实现中 return name; } Person::Person():name("Josin"){ }
下一节:数据抽象与封装