面向对象的程序设计:(oop)
一、oop概述:
面向对象程序设计的核心是数据抽象、继承和动态绑定。通过使用数据抽象,我们可以将类的接口与实现分离;使用继承,可以定义相似类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别从而用统一的方式使用他们的对象。
二、面向对象与面向过程
面向对象编程与传统的过程性编程的区别在于,OOP强调的是在运行阶段(而不是编译阶段)进行决策。运行阶段指的是程序运行的过程中,编译阶段指的是编译器将程序组合起来时。
运行阶段决策提供了灵活性,可以根据当时的情况进行调整。例如,在考虑为数组分配内存的情况。传统的方法是声明一个数组。要在c++中声明数组,必须指定数组的长度。因此,数组长度在程序编译的阶段就已经确定好了,这就是编译阶段决策。运行阶段决策等于是制定了计划如每天刷5道题,但是在刷题的过程中,会根据实际情况不断改变计划,如某天身体不舒服少刷,某天手感好多刷。而编译阶段决策就像是无论在什么条件下,都坚持之前制定的计划完成安排,无论生病,还是有大量时间学习,都固定的每天刷5道题。
比如,有一个程序且此程序在大多数的情况下只需要一个包含20个元素的数组便会足够使用,但是还有少部分情况程序可能需要200个元素的数组。为了这种情况,安全起见,我们需要使用一个包含200个元素的数组,这样,在大多数的情况下,我们的程序都会浪费大量内存,并且可能还会有特殊情况需要205个元素长度的数组,导致越界。OOP通过在运行阶段进行决策的方式,使程序更加灵活。在程序运行后,可以告诉它这次需要多少个元素,下次需要多少个元素等等。
总之,在使用OOP时,有可能是在运行阶段确定数组的长度。为了使用这种方法,语言必须允许在程序运行时创建数组。c++采用的方法是,使用关键字new请求正确数量的内存以及使用指针来跟踪新分配的内存的位置。
在运行阶段做决策并非oop独有的(动态数组),但是使用c++比c简单。
- int n;
- printf(“请输入数组的长度:”);
- scanf(“%d”,&n);
- int sz[n];