面向对象程序设计的基本内容 对象/类(Object&Class) 对象是由数据(数据成员、 成员变量、实例变量、对 象的局部变量等)及能对其实施的操作(成员函数、 方法、消息处理函数等)所构成的封装体: 类描述了对象的特征(包含哪些数据和操作) 对象属于值的范畴,而类则属于类型的范畴;对象要 通过类来创建。 继承(Inheritance) 在定义一个新的类(派生类、子类)时, 可以把已有 类(基类、父类)的一些特征描述先包含进来,然后 再定义新的特征。 单继承与多继承
面向对象程序设计的基本内容 ◼ 对象/类(Object&Class) • 对象是由数据(数据成员、成员变量、实例变量、对 象的局部变量等)及能对其实施的操作(成员函数、 方法、消息处理函数等)所构成的封装体; • 类描述了对象的特征(包含哪些数据和操作)。 • 对象属于值的范畴,而类则属于类型的范畴;对象要 通过类来创建。 ◼ 继承(Inheritance) • 在定义一个新的类(派生类、子类)时,可以把已有 类(基类、父类)的一些特征描述先包含进来,然后 再定义新的特征。 • 单继承与多继承
■ 多态性(Polymorphism)与动态绑定(Dynamic Binding) 多态:某一论域中的一个元素存在多种解释。在 程序中通常体现为: 一名多用: 。函数名重载 ·操作符重载(语言预定义和用户自定义)〉 类属性: ·类属函数:一个函数能对多种类型的数据进行操作。 ·类属类型: 一个类型可以描述多种类型的数据。 绑定:确定对多态元素的某个使用是多态元素的 哪一种形式。 静态绑定 (Static Binding,也称前期绑定,Early Binding):在编译时刻确定 动态绑定(Dynamic Binding, 也称后期绑定或延迟 绑定,Late Binding):在运行时刻确定
◼ 多态性(Polymorphism)与动态绑定(Dynamic Binding) • 多态:某一论域中的一个元素存在多种解释。在 程序中通常体现为: ◼ 一名多用: • 函数名重载 • 操作符重载(语言预定义和用户自定义) ◼ 类属性: • 类属函数:一个函数能对多种类型的数据进行操作。 • 类属类型:一个类型可以描述多种类型的数据。 • 绑定:确定对多态元素的某个使用是多态元素的 哪一种形式。 ◼ 静态绑定(Static Binding,也称前期绑定,Early Binding):在编译时刻确定。 ◼ 动态绑定(Dynamic Binding,也称后期绑定或延迟 绑定,Late Binding):在运行时刻确定
。面向对象程序特有的多态(继承机制带来的): ■对象类型的多态:子类对象既属于子类,也属于父类。 对象标识的多态:父类的引用或指针可以引用或指向父 类对象,也可以引用或指向子类对象。 消息的多态:发给父类对象的消息也可以发给子类对象, 即,一个消息有多种解释(父类与子类有不同解释) 多态带来的好处: ■易于实现程序高层(上层)代码的复用。 使得程序扩充变得容易(只要增加底层的具体实现 》 ■增强语言的可扩充性(操作符重载等
• 面向对象程序特有的多态(继承机制带来的): ◼ 对象类型的多态:子类对象既属于子类,也属于父类。 ◼ 对象标识的多态:父类的引用或指针可以引用或指向父 类对象,也可以引用或指向子类对象。 ◼ 消息的多态:发给父类对象的消息也可以发给子类对象, 即,一个消息有多种解释(父类与子类有不同解释)。 • 多态带来的好处: ◼ 易于实现程序高层(上层)代码的复用。 ◼ 使得程序扩充变得容易(只要增加底层的具体实现)。 ◼ 增强语言的可扩充性(操作符重载等)
类 对象构成了面向对象程序的基本计算单位 而对象的特征则由相应的类来描述。因此 程序中首先要定义类。 C++的类是一种用户自定义类型,定义形式 如下: class<类名>{<成员描述>}; 成员包括:数据成员和成员函数 类成员标识符的作用域为整个类定义范围 注意:在C++中,也允许在结构(struct) 和联合(union)中定义函数,但成员的访 问控制与类不同
类 ◼ 对象构成了面向对象程序的基本计算单位, 而对象的特征则由相应的类来描述。因此, 程序中首先要定义类。 ◼ C++的类是一种用户自定义类型,定义形式 如下: class <类名> { <成员描述> } ; • 成员包括:数据成员和成员函数。 • 类成员标识符的作用域为整个类定义范围。 ◼ 注意:在C++中,也允许在结构(struct) 和联合(union)中定义函数,但成员的访 问控制与类不同
例:一个日期类的定义 class Date public: void set(inty,intm,intd)/成员函数 { year y; month m; day d; } bool is_leap_year()/成员函数 return (year%4 ==0&&year%100!=0) (year%400==0); } void print()/成员函数 cout <year <".<month <".<<day; } private: int year,month,day;/数据成员 };
例:一个日期类的定义 class Date { public: void set(int y, int m, int d) //成员函数 { year = y; month = m; day = d; } bool is_leap_year() //成员函数 { return (year%4 == 0 && year%100 != 0) || (year%400==0); } void print() //成员函数 { cout << year << "." << month << "." <<day; } private: int year,month,day; //数据成员 };