过程性编程和面向对象编程
过程性编程:我需要输入一个人的姓名等信息,然后还需要一个函数来处理这些数据,然后还需要希望程序显示这个结果
面向对象的编程:我跟踪的对象是选手,所以我需要一个对象来表示选手的各个方面,然后我需要一些方法来处理这个对象,主要通过描述对象所需的数据以及描述用户与数据交互所需的操作。
抽象和类
类一般由两个部分组成:
类声明:以数据成员的方式描述数据部分,以成员函数(方法)的方式描述共有接口
类方法定义:描述如何实现类成员函数
通常将类放在头文件中,而将其实现写在文件中
class 类名 来创建一个类如class stock{}
类名 对象名 来创建一个新对象 stock sally;
访问控制
关键字private和public和protected,描述了对类成员的访问控制,private是默认的访问控制
使用类对象的程序都可以访问共有部分,但是只能通过公有成员函数或者友元函数来访问对象的私有成员,公有函数是程序和对象的私有成员之间的桥梁
封装:将实现细节放在一起并将他们和抽象分开
实现类成员函数
访问类成员使用:: 比如void stock::update();
在定义类内公有函数的时候,不需要加::因为他们同属于一个类
内联函数
一个函数其定义位于类声明中的叫内联函数,通常将比较小的函数作为内联函数
也可以在类声明之外定义成员函数,使用inline限定符可以将其设置为内联函数
使用哪个对象
如何使用对象的成员函数
stock a,b;//创建了两个对象ab,他们是stock类的
a.show();//使用了a对象的show方法
每个对象都有自己独立的储存空间,用于存放内部变量和类成员,但是同一个类的所有对象共享同一组类方法,即方法只有一个副本。
类的构造函数和析构函数
类不能像结构体一样,使用struct name={“123”,1}这样的方式初始化(如果有相应的构造函数是可以的)
因为数据部分的访问状态是私有的,程序不能直接访问,所以我们应该设计合适的成员函数让对象初始化,这个函数就称为构造函数
默认构造函数和类名相同
当对象过期的时候,程序自动执行一个函数–析构函数,默认析构函数名是类名前面加一个~
this指针
this指针指向用来调用成员函数的对象,比如函数调用stock1.topval(stock2)将this指针设置为stock1对象的地址
使用方式 this->xxx
可以创建一个对象数组,是包含很多对象的数组
在类中定义的名称的作用域都为整个类,可以在不同类中使用相同的类成员名而不会引起冲突,但是不能通过外部直接访问类
定义域内函数使用,void Ik::ViewIk()const;
使用static 来在域内定义常量
enum egg{small,big}和enum t_shirt{small,medium}是不被允许的,但是可以通过enum class egg或者enum struct egg成功。