面向过程编程:先考虑函数,然后再细化到数据
面向对象编程:对象(数据+函数)
在计算中,抽象是根据与用户的接口来表示信息的关键步骤。
总之,只当基本类型完成了三项工作
类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。
自定义类的思路:以股票为例
1.首先要思考要将什么作为一个基本单位:你可以把一个人目前持有的某只股票作为一个基本单位
2.需要哪些功能(方法)
1. 获得股票
2. 增持
3. 卖出股票
4. 更新股票价格
5. 显式关于所持股票的信息
3.需要存储哪些信息
1. 公司名称
2. 所持股票的数量
3. 每股的价格
4. 股票总值
4.定义类
什么是接口?
接口是一个共享框架,供两个系统交互时使用。—如在计算机和打印机之间或者用户或计算机程序之间。
接口的含义:让程序员能够编写与类对象交互的代码,从而让程序能够使用类对象。
使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数来访问对象的私有成员。因此公有成员函数是程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。
数据隐藏:程序无法访问对象的私有成员。它保证了数据的完整性。(不仅不允许程序员直接访问数据,而且确定了函数的接口,然后当你发现更好的方式实现函数时,你可以直接更改函数具体的实现而无需更改接口,这提高了程序的可维护性)
封装:数据隐藏(将数据放入类的私有成员),在私有部分中隐藏实现的函数细节,将类函数定义放在与类声明分开的文件中。
不必在类声明中使用关键字private,因为这是类对象的默认访问控制。
class World
{
float mass; // private by default
char name[20]; // private by default
public:
void tellall(void);
...
};
类和结构体的区别?
唯一的区别是结构体的默认访问类型是public,而类的默认类型是private。c++程序员通常使用类来实现类描述,同时将结构体限制为表示纯数据对象(通常称为普通的老式数据结构,或POD结构)。
类成员函数与普通函数的区别:
类作用域:
//这两个类成员函数相互不干扰
void Stock::update(double price);
void Buffoon::update()
一个类成员函数可以直接使用同类下的其他成员函数而无需::符号(在类定义或成员函数定义中都可),但是其他地方必须使用class::符号,eg:Stock::update()。
定义位于类声明中的函数都将自动成为内联函数。
下面这两种定义是等价的:
class Stock // class declaration
{
private:
...
void set_tot() { total_val = shares * share_val; }//是个内联函数
public:
...
}; // note semicolon at the end
#endif
class Stock
{
private:
...
void set_tot(); // definition kept separate
public:
...
};
inline void Stock::set_tot() // use inline in definition
{
total_val = shares * share_val;
}
调用成员函数时,它将使用被用来调用它的对象的数据成员。
下面这两个函数调用使用的是各自的shares and share_val:
Stock kate, joe;
kate.show(); // the kate object calls the member function
joe.show(); // the joe object calls the member function
所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员;但同一个类的所有对象共享同一组类方法,及每种方法只有一个副本。
在OOP中,调用成员函数被称为发送消息,因此将同样的消息发送给两个不同的对象将调用同一个方法,但该方法被用于两个不同的对象。见下图。
C++的目标是使得使用类与使用基本的内置类型(如int和char)尽可能相同。
基本上基本类型能做的自定义的类也能做。