OOP面向对象编程——C++ - winnie的专栏 - CSDN博客

来源:百度文库 编辑:神马文学网 时间:2024/04/24 14:32:26
  OOP编程的一些概念:         一.对象(Object),这个概念可以说是面向对象里面的最为核心的概念,如果找不着对象,又如何面向对象呢?对象,也就是你要处理的问题里面设计的若干个因素,比如你做学生成绩统计,那么学生当然是你要考虑的对象。        二.类(Class),从本质上讲是先有对象才有类,因为在处理的实际编程问题时,你面对的是一个个具体的对象,太多了,怎么办?分门别类,实现物以类聚,对了,将相同属性的对象作为一类进行考虑,张三也好,李四也好,他们都是人的一个实例。在具体的语言实现时,两者的顺序就需要颠倒一下了,也就是要先有类,然后才能实例化生成对象。       三.面向对象的三大特性:      3.1 封装            所谓的封装也就是在类的设计时,实现对于类内的数据与方法的不同权限设置,有些数据和方法,我们不希望用户在类的外部通过实例化去调用,那么我们将它们声明成私有的(private),这样这些数据和方法只能被类内部的成员函数访问,而如果希望能够被实例访问,那么声明成公有的(public),至于第三种访问区分符(protected)保护型的,在类的继承时应用,我们到继承那里说明。       与封装有关的一个概念是“抽象”(abstract) ,即将设计的类的最主要的功能表示出来,这些功能正是要被其他类和函数访问的。      3.2 继承       与继承有关的概念是关系,关系描述了类之间的联系,有四种基本类型,即“继承、组合、利用、实例化”。继承就是说某一个类具有了另外一个类所有的数据和方法,当然可以修改一部分并且增加新的数据和方法。继承分为两种类型,即单重继承和多重继承。        单重继承,即类Derived继承了类Base,定义如下:         class Base        {        };       class Derived:public Base         {        }       可见在定义继承类时,要指明继承了哪一个类,并且指明继承级别(public,protected,private),通过这三种访问区分符的修饰,可以改变基类数据在派生类中的访问权限,public 继承不会改变,protected继承的话原来的public 数据和方法变成派生类的protected型数据和方法,其他不变,private继承则将所有的数据和方法的访问权限设置为private,即这些数据和方法都不能在类的外部访问。        派生类的构造和析构顺序,首先构造基类,然后构造派生类,中间是类的作用,析构顺序正好相反。      多重继承是说一个类继承了两个或者多个类的数据或者方法。在多重继承这里预见的主要的问题是两个歧义性:首先,当继承的两个基类中含有相同的数据或者方法时,在派生类中调用无法区分,解决方法:指明调用的哪一个类的成员变量和方法,使用作用域分解运算符;在派生类里面重新定义该数据或者方法。第二类歧义性发生在多层继承时,B,C继承了A,而D又继承了B,C,正如矩形和菱形继承四边形而正方形继承了矩形和菱形,两条继承路径使得基类被两次继承,直接访问无法区分,解决方法:支出继承路径,使用虚基类(virtual)方法,在定义继承关系时添加virtual使得基类永远只有一份拷贝。      3.3 多态      多态性分为两种,即静态多态性和动态多态性。所谓多态,也就是明明同样一个东西,在不同情况下有着不同的表现。       静态多态性,即预先定义好的,通过函数重载(funcition overload)实现,函数包含了返回值、函数名称、函数参数三个,名字多表示功能,返回值的区分不能区分函数(想象数据类的强制转换吧)。因此重载也就是函数名称相同而参数不同,不同可以表现在参数个数不同、参数类型不同、参数顺序不同。      例如 int max(int,int)                float max(float,float)     另外我们自己定义了希望在这个新的类型上仍然能够实现我们原有的算术运算、逻辑运算等运算符,解决机制是运算符重载,即我们可以将系统原有的运算符(不是全部)重新定义在我们自己的类上实现。如    Complex  Complex::operator + (const Complex  & C1)  在复数类上定义了自己的加法运算。        动态多态性呢,是说在程序执行的时候有着不同的表现。涉及的一个概念是“联编”,也就是我们要用某一个类的方法,一般情况下总是通过这个类的实例或者指针,这是系统必须知道这个函数是哪一个类的,即由对象到类的过程,有些联编在编译时就可以,但是有些只能在程序实际执行时确定,也就是 滞后联编。为了实现滞后联编,我们需要将基类的函数设置为虚函数(virtual),这样实现滞后联编。        如类Manager 和 Saler 都继承了类Employee,三个类都有方法CalcSalary(),程序如下:         Employee * ptr;        ptr = new Manager;         ptr->CalcSalary();        ptr = new Saler;        ptr->CalcSalary().      我们希望的正是两个函数有着不同的输出,虚函数实现了这一点。        纯虚函数,virtual CalcSalary()=0;函数没有实体,就等着在派生类里面重新设计了,包含了一个或者多个纯虚函数的类是抽象类,抽象类不能实例化但是可以被指针指向。四。构造函数与析构函数        构造函数和析构函数是类中特殊的两个函数。构造函数负责对类内部的数据进行初始化,构造函数没有返回值,名称与类相同,可以重载。析构函数实现去初始化,在类结束前进行扫尾工作,没有返回值类型,名称与类相同,但是前面加~以表示否定,不能重载,不需要调用。五.Const关键字 以及Volatile 关键字     作用有二:定义常量变量类型 const double PI = 3.1415926;                         修饰参数,一般用于修饰输入参数,使得其只能读不能写。     另外比较重要的:还有就是防止指针被修改     提到Const就不能不说到Volatile关键字,两者构成了c-v qualifier(所谓的c-v限定)     话说此关键字乃吾心中之痛:曾被一个牛人面到不知其意~~  捶地啊!     回来后就查询,学习……笼统的说是告诉编译器“不知何时会改变”     换言之,就是声明的东西可以由外部程序改变,禁止编译器对读写操作进行任何优化。     如此确定的表达一个不确定的信息,实属罕见!  but, 这个不是我不知道此用法的借口,看来还需修炼六。static关键字          定义静态函数和静态数据,静态数据表所有这个类的对象共同维护一个数据,相当于这个类的全局变量,只能通过类访问,初始化为0。静态函数实现了不定义对象访问类的功能,静态函数只能访问静态数据。七.inline关键字         内联函数,实现对于简短函数的替换操作,提高速度。      这个关键字其实内涵也很深,与C中的define有相似的作用,但差别也很多,不仅仅是简单的替换功效      记得和某位牛人探讨此函数的功效,用法时,收获颇深……
发表于 @ 2010年05月19日 10:32:00 | 评论( 0 ) | 编辑| 举报| 收藏 旧一篇:Linux/Unix环境下的make命令详解 | 新一篇:几种Linux 的开关机状态解析
查看最新精华文章 请访问博客首页相关文章 发表评论 表 情:           评论内容:  用 户 名: 登录 注册 匿名评论 匿名用户验 证 码:   重新获得验证码   公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
 Email:webmaster@csdn.net
Copyright © 1999-2010, CSDN.NET, All Rights Reserved
 本文来自CSDN博客,转载请标明出处:file:///C:/Documents%20and%20Settings/Administrator/桌面/网文/OOP面向对象编程——C++%20-%20winnie的专栏%20-%20CSDN博客.mht
OOP面向对象编程——C++ - winnie的专栏 - CSDN博客 小细节大问题——程序的效率 - winnie的专栏 - CSDN博客 WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading) 面向对象编程五大原则 - Marvin - CSDN博客 面向对象分析过程案例实战 - FcBayernMunchen的专栏 - CSDN博客 几种Linux 的开关机状态解析 - winnie的专栏 - CSDN博客 Linux/Unix环境下的make命令详解 - winnie的专栏 - CSDN博客 C语言实现面向对象编程 BY Junho - 中山大学信息发展中心数媒部 - 博客园 c 面向对象的编程入门篇--类构造函数与析构函数 IE编程---DLL绑定 - skyremember的专栏 - CSDN博客 delphi多线程 - 焦祺的编程专栏 - CSDN博客 C语言宏的学习: - henry19850318的专栏 - CSDN博客 C语言宏的学习: - henry19850318的专栏 - CSDN博客 异常处理 - [C++] - guomei的专栏 - CSDN博客 C Recommend Book List - ehui928的专栏 - CSDN博客 C语言字符串函数大全 - amossavez的专栏 - CSDN博客 javacard mask.c 文件结构 - tccth4091的专栏 - CSDN博客 【原创】面向对象的Jscript - 前台制作与脚本专栏 - 经典论坛 网页-网站-制作-设计-编程 诗律表——五绝 - yanwenyuan0102的专栏 - CSDN博客 C++ 对象的内存布局(上) - 陈皓专栏 【空谷幽兰,心如皓月】 - CSDN博客 面向对象的设计原则-类设计原则 ——希赛网软件工程频道面向对象 电脑培训:理解面向对象编程的简单例子 如何在编程中降低分支预测错误的几率 - Duofeng的专栏 - CSDN博客 面向对象之关系依赖 - zhangningbo168的专栏 - CSDNBlog