1) 面向对象的语言出发点:
更直接地描述客观世界中存在的事物(对象)以及它们之间的关系。
特点:
////是高级语言。/////将客观事物看作具有属性和行为的对象。/////通过抽象找出同一类对象的共同属性和行为,形成类。/////通过类的继承与多态实现代码重用
面向过程与面向对象程序设计方法的比较
一、面向过程程序设计方法
程序 = 数据结构+算法
二、面向对象程序设计方法的规律是:
对象 = (数据结构+ 算法)
程序 = 对象+对象+对象+ ……+对象
2) !继承对于软件复用有着重要意义,是面向对象技术能够提高软件开发效率的重要原因之一。
定义:特殊类的对象拥有其一般类的全部属性与服务,称作特殊类对一般类的继承。
封装1、两个含义
☆包装
把对象的全部属性和操作结合在一起,形成一个不可分割的整体。
☆信息隐藏
这个整体尽可能对外隐藏它的细节,只对外公布一个有限的界面,通过这个界面和其他对象交互。
封装的特点
具有一个清楚的边界,私有成员封装在内部,外部不可以访问
提供必要的接口
对象内部的数据和方法是受封装外壳保护的,其它对象不能直接使用。
程序设计语言中的封装
在程序设计语言中用类来实现封装。
类是属性和操作的结合体,并且在定义类的属性和操作时,规定了它们的可见性。只有公有成员才能被外界访问。
C++提供的继承机制提供了类之间相互关系的解决方案,使某个类可以继承另外一个类的特征和能力。
使用继承符合人们对事物的认识和叙述,大大简化了对问题的描述,提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率,实现软件重用(software reusability)。
多态性:描述的是同一个消息可以根据发送消息对象的不同采用不同的行为方式。
程序设计语言中的多态性
(1)在程序设计语言中多态性表现为以统一的方式对待具有相同的接口的不同类的实例的能力。(2)C++语言支持两种多态性 ☆编译时的多态性 静态联编(通过函数重载实现)
☆运行时的多态性 动态联编(通过虚函数实现)
多态的实现:
函数重载
运算符重载
虚函数
3) 1.构造(constructor)函数 在创建对象时,系统自动调用它来初始化数据成员;
2. 析构(destructor)函数 在对象生存期结束的时候,自动调用来释放该对象。
构造函数的特点
(1)构造函数是类的一个特殊的成员函数,函数名与类名相同;
(2)构造函数的访问属性应该是公有(public)访问属性;
(3)构造函数的功能是对对象进行初始化,因此在构造函数中只能对数据成员做初始化,一般不做初始化以外的事情;
4)构造函数可以在类内定义也可以在类外定义;
(5)构造函数无函数返回类型。注意:是什么也不写,也不可写void;
(6)在程序运行时,当新的对象被建立,该对象所属的类的构造函数自动被调用,在该对象生存期中也只调用这一次。
(7)构造函数可以重载。
析构函数的特点
(1)析构函数函数的名字是类名加“~”字符,表明它与构造函数相反;
(2)析构函数没有参数,没有返回类型;
(3)析构函数不能重载,一个类中只能定义一个析构函数
(4)在对象生存期结束时,系统自动调用析构函数。
拷贝构造函数定义格式
类名::拷贝构造函数名(类名& 引用名)
例如:
Tdate ::Tdate(Tdate & d); //形参是一个对象的引用
CString( const CString & stringSrc ); //形参是一个const的对象引用
通常在下述三种情况下,需要用拷贝初始化构造函数:
(1)明确表示由一个对象初始化另一个对象时;如Cdate day3(d1);
(2)当对象作为函数实参传递给函数形参时;如fun(Cdate day);
(3)当对象作为函数的返回值,创建一个临时对象时。
“∷”是作用域限定符或称作用域运算符,用它声明函数是属于哪个类的
4)))const有什么用途
1)定义常量 可以为所有的内置类型对象使用const限定符(2)限定指针const 限定指针有两种用法,一种是限定指针指向的对象,另一种是限定指针中存放的内容 (3)限定函数参数 (4)限定函数返回值 按值返回一个内置类型对象时,与按值传递参数的情况一样,建议不加const
5))))静态数据成员特点 /////在每个类中只有一个拷贝,由该类的所有对象共同维护和使用/// /静态数据成员的值对每个对象都是一样,但它的值是可以更新的。////只要对静态数据成员的值更新一次,保证所有对象存取更新后有相同的值
静态成员函数的特点
(1) 对于公有的静态成员函数,可以通过类名或对象名来调用,而一般的非静态成员函数只能通过对象名来调用。静态成员函数可以由类名通过符号“::”直接调用。
(2)静态成员函数可以直接访问该类的静态数据成员和静态成员函数,不能直接问非静态数据成员和非静态成员函数。如果静态成员函数中要引用非静态成员时,可通过对象来引用
6))))友元成员函数 当一个类作为另一个类的时,意味着这个类的所有成员函数都是另一个类的友元函数,可以访问另一个类的私有成员
一个类可以作另一个类的友元称为友元类 . 当一个类作为另一个类的时,意味着这个类的所有成员函数都是另一个类的友元函数,可以访问另一个类的私有成员
7)))继承与派生的基本概念
//保持已有类的特性而构造新类的过程称为继承。通过继承,新类获得了父类的所有数据成员和成员函数,并可以添加自己的数据成员和成员函数
//在已有类的基础上新增自己的特性而产生新类的过程称为派生。
//被继承的已有类称为基类
//单继承 派生类只从一个基类派生。//多继承/// 派生类从多个基类派生。/多重派生 由一个基类派生出多个不同的派生类。 //多层派生 派生类又作为基类,继续派生新的类继承的目的:实现代码重用。 派生的目的:当新的问题出现,原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造。
8))) 建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就叫做函数模板
函数模板指定了怎样根据一组或更多实际类型或值构造出独立的函数。模板函数是根据函数模板构造出来的函数。二者区别如下:
(1)函数模板与模板函数的关系好比类与对象的关系。函数模板与类的定义相似,而模板函数与对象的定义相似。
(2)函数模板是个模板,用来生成函数。模板函数是个函数,由函数模板生成。
3)函数模板是程序员用代码写出来的,模板函数是编译系统在编译时根据函数模板自动生成的。 (4)函数模板是模板的定义,是一类函数的抽象,代表了一类具有相同功能的函数,不能够实际执行。模板函数是函数模板的实例,代表具体函数,具有程序代码,占用内存空间,可以实际执行。
#include<iostream>
#include <string>
using namespace std;
class Cstudent
{
public:Cstudent( string n, string a,float b)
{name=n; sex=a; score=b; }
~Cstudent(){}
void display1()
{ cout<<"姓名:"<<name<<endl;cout<<"性别:"<<sex<<endl;
cout<<"成绩:"<<score<<endl;}
private: string name; string sex; float score; };
class Cgraduate:public Cstudent
{
public:Cgraduate(string n,string a,float b,string c):Cstudent(n,a,b)
{ advisor=c;}
void display()
{display1(); cout<<"导师:"<<advisor<<endl;}
private: string advisor; };
void main()
{ Cgraduate gra1("张卓","男",99,"宝贝");
gra1.display();}
第二篇:面向对象回顾总结
一面向对象思想(Object-Oriented)
二面向对象分析方法
三面向对象的程序设计(OOP)
(一) 类
1 类:对具有相似特征对象的抽象(概念)
2 语法:
class 类名{
字段(成员变量);
属性(方法);
构造函数;
方法;
}
3 重载
语法:方法名一样,参数列表不同;
方法重载、构造函数重载。
4 static
不隶属于某一个对象,隶属于该类的所有对象,公共共享数据区域
类名.静态成员
5 实例化
A a=new A();
注:
值类型:存放实际数据;int double等
引用类型:存放实际数据的首地址;类、数组、接口等
参数传递:传数据值、传地址
函数调用过程:参数列表?执行:分配内存,接收值,执行;执行完毕后,参数和局部变量对应的数据空间释放。
6 out、params、ref
(二) 继承关系
1 问题:代码冗余
2 逻辑关系反映“是”关系(is a)
3 子类父类
派生类基类
4 子类继承了父类的非私有成员(public、protected)
5 构造函数:子类构造函数执行之前,调用执行父类的构造函数。默认情况下,调用执行父类中不带参数的构造函数,但可通过base指明所要调用的构造函数。 6 重写:子类重新实现父类中已有方法。
(1) virtual+override
(2) new
7 密封类
sealed class A
{
}
8 抽象类
abstract class A
{
}
不能实例化;
通过非抽象子类继承使用;
抽象类可以包含抽象成员,抽象成员只有声明没有实现;
非抽象子类“必须”实现(override)抽象类中的抽象成员(abstract); 抽象类可以声明一个标准、约定、规范。
9 传递性
10 单继承性
(三) 接口
1 接口:声明了一组通用操作
2 继承性
Interface Ia
{
//属性;
//方法;
//事件;
//索引器;
}
Interface Ib:Ia
{
}
3 实现关系
一个类实现了某个接口,这个类“必须”实现这个接口中声明的成员。 接口声明了一个标准、规范、约定。
4 接口使用
接口引用可以指向所有实现该接口的对象,对该对象进行接口中定义的操作; 一个对象可以被多个不同的接口引用指向,该对象必须实现这些接口; 接口引用作为方法的参数、接口类型作为方法返回值(工厂模式)