- 结构化程序设计
程序 = 数据结构 + 算法
- 程序由全局变量以及众多相互调用的函数组成
- 算法以函数形式呈现,用于对数据结构进行操作
不足:函数和数据结构没有directly connect,随着程序规模增加,程序变得难以理解,比如某个数据结构到底有哪些函数在操作?某个函数到底使操作那些数据结构?任何两个函数存在什么调用关系?
- 没有封装和隐藏概念,如果要修改某个变量,必须要把源语句找出来,不利于维护和扩充
- 难以查错
重用:已有相同功能的代码块,结构化程序不利于重用。
- 面向对象程序设计
面向对象程序 = 类+类+类+……
- 把某一类客观事物的共同特点归纳出来,形成一个数据结构(可以用多个变量描述事物属性)
- 把该事物所能进行的行为归纳出来,形成一个个函数,函数可以来操作数据结构(抽象)
将数据结构和操作方法捆绑——类,这就是封装
面向对象具有抽象、封装、继承、多态的四个基本特点
- 类和对象
1)从客观事物抽象出类
eg.矩形,则成员变量为长、宽,成员函数有计算面积、周长、 设置长宽、以及displace。
#include<iostream>
class rectangle
{
private:
double length;
double width;
public:
rectangle(double a=0,double b=0):length(a),width(b){
}
double area(){
return (length*width);};
double perimeter(){
return 2*(length+width);}
void displace();
};
void rectangle::displace()
{
std::cout<<"Area is "<<area()
<<", perimeter is "<<perimeter()<<std::endl;
}
int main()
{
rectangle r1,r2(10,20);
cout<<r1.area()<<endl;
r2.displace();
}
对象的内存分配
- 对象所占用的内存空间大小等于所有成员变量的大小之和,成员函数不会放在对象的内存里边。
- 每个对象都有各自的存储空间
使用成员函数和成员变量方法
- 对象.成员变量/成员方法
- 指针->成员名
rectangle r1(10,20),r2; rectangle* p =&r1; p->displace();
- 引用名.成员名
可访问范围
- private( default),不能在类以外被访问,设置私有成员的机制叫 隐藏,如要访问一定要通过成员函数。
- public
- protected
成员函数重载以及参数缺省
对,成员函数也可以重载和参数缺省,略……(avoid ambiguity problems就好)
int val(int x = 0) ;
void val() ;
//这样可能会二义性