什么是类?
类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
类的构成包括成员属性和成员方法(数据成员和成员函数)。数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于操作类的各项属性,是一个类具有的特有的操作,比如“学生”可以“上课”,而“水果”则不能。
类的三大特性
-
封装性 将数据和操作封装为一个有机的整体,由于类中私有成员都是隐藏的,只向外部提供有限的接口,所以能够保证内部的高内聚性和与外部的低耦合性。用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员,能够增强安全性和简化编程。
-
继承性 更符合认知规律,使程序更易于理解,同时节省不必要的重复代码。
-
多态性 是指同一操作作用于不同对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向父类(基类)的指针,来调用实现子类(派生类)中的方法。
class 类名 {
public: 公有成员
private: 私有成员
protected: 保护成员
};
什么是对象?
类的实例称为对象。
就像声明某种类型的变量一样,声明一个类类型的对象,就是类的实例化,会涉及到必要的内存分配。
类名 对象名 = new 类名(参数列表)
int *p = new int[10];
Student student = new Student();
this指针:
this是一个指针,里面放置的是当前对象的地址(成员函数执行时,调用该成员函数的对象)
this指针是类“成员函数”第一个隐藏的参数,该指针指向调用成员函数的对象(当前对象)
等讲构造函数再继续深入。
类名限定:
如果成员函数不在类内部定义,而在类.cpp文件中定义,就需要加上类名限定。如下:
class Student{
public:
int age;
char sex;
void getInformation();
};
这里之所以要加public是因为类默认是私有的,不能在外部直接赋值。像下面这样。于是我就改成了public,就像结构体struct一样了。
int main(int argc, char *argv[])
{
Student s1;
s1.age = 10;
s1.getInformation();
return 0;
}
Student.cpp,加上类名限定 Student::
#include "Student.h"
void Student::getInformation()
{
cout<<this->age<<endl;
}
还有命名空间的类的成员函数,于此都差不多,也举个例子
namespace one{
class Student{
public:
int age;
char sex;
void getInformation();
};
};
调用就是one::Student::getInformation();
class和struct的区别:
struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的
我依旧强调struct是一种数据结构的实现体,虽然它是可以像class一样的用。我依旧将struct里的变量叫数据,class内的变量叫成员,虽然它们并无区别。
struct: 1.可以通过对象名直接访问
2.声明成员为公有成员
class: 1.可以通过对象名直接访问
2.声明成员为公有成员