C和C++的面向对象专题(1)——何为面向对象

题记:

面向对象是一种思想,而不是一门语言

我们上哪去找对象,都面向对象去了

本专栏文章列表

一、何为面向对象

二、C语言也能实现面向对象

三、C++中的不优雅特性

四、解决封装,避免接口

五、合理使用模板,避免代码冗余

六、C++也能反射

七、单例模式解决静态成员对象和全局对象的构造顺序难题

八、更为高级的预处理器PHP

一、何为面向对象

现在学软件开发,都讲面向对象的编程模型,其实也很简单。用一句话来总结,面向对象就是将方法和方法的属性整合在一起,让每个方法引用的属性值尽可能在对象内部,对外保持简洁的接口。

实现面向对象的设计,目标不是写类,而是设计结构,对每一个对象设计良好的接口和封装模式,将优雅的接口提供给使用者,最大程度的降低代码耦合。

面向对象的设计,可以用一本书来讲解,但我们这里将演示面向对象的基本思想和如何实现

从一个简单的例子看对象

恩,那好,我们现在构建一个对象

class window {
public:
    window(int x, int y, int width, int height) {
        this.x = x; this.y = y;
        this.width = width;
        this.height = height;
    }
    void Show();

private:
    int x, y, width, height;

    // 也许你还可以添加更多属性,例如透明度、子元素列表、菜单、状态栏等待
};

这是一个基本的窗口对象,也许它并不能给你直观的印象,但我希望能通过其说明一些问题。

对象有公开方法,有私有属性,我们在构造这个对象的时候,将一些参数传入,那么我们发现,这个过程简化了我们对于某些方法的使用。

例如在C函数中,如何你希望绘制一些内容,那么你可能需要做的是写这样一个函数:

int Draw(struct window*, int, int, int, int);

将全部的参数传入进去,但如果使用次数多后,我们发现参数大多一样,那么不如把他们都打包进入window结构体中,于是函数变成了这样:

int Draw(struct window*);

这样我们只需要改变结构体中的值就可以了,这个思想,就是面向对象的基础,而C++正是让这要传入的结构体自动传入,进而演变为了this指针。

面向对象的设计原则

几乎软件的设计原则都是高内聚,低耦合。

C++的设计也是一样,类的公共方法应该尽可能清晰明确,简单好用,而不必要外部了解的信息,和细节过程,都放入到私有成员中,避免被误用。

避免过度继承和重载,虽然继承和重载很大程度上能够降低两个模块间的耦合,但其实现复杂,结构混乱,容易使得代码不够清晰。同样,也要避免设计模式的滥用。

C++的开发应该本着面向对象的思想,利用类的封装特性,将模块内部的部分高效的组织在一起,而接口,可以采用多态调用的方式,保证灵活性。

时间: 2024-08-05 10:12:43

C和C++的面向对象专题(1)——何为面向对象的相关文章

C和C++的面向对象专题(8)——更为高级的预处理器PHP

本专栏文章列表 一.何为面向对象 二.C语言也能实现面向对象 三.C++中的不优雅特性 四.解决封装,避免接口 五.合理使用模板,避免代码冗余 六.C++也能反射 七.单例模式解决静态成员对象和全局对象的构造顺序难题 八.更为高级的预处理器PHP 八.更为高级的预处理器PHP C++的宏在某些情况下非常难用,例如将代码展开成为这样: Macro( A, B, C, D ) => func("A", A); func("B", B); func("C&

C和C++的面向对象专题(2)——C语言也能实现面向对象

本专栏文章列表 一.何为面向对象 二.C语言也能实现面向对象 三.C++中的不优雅特性 四.解决封装,避免接口 五.合理使用模板,避免代码冗余 六.C++也能反射 七.单例模式解决静态成员对象和全局对象的构造顺序难题 八.更为高级的预处理器PHP 二.C语言也能实现面向对象 今天要为大家介绍C语言的面向对象设计方法,正如题记上面所说,面向对象是一种思想,而并非是一种语言,我们将会介绍C语言实现的面向对象开发方式. 简单实用的C语言面向对象设计思路 众所周知,C++中的面向对象十分方便,但在C中,

C和C++的面向对象专题(3)——C++中的不优雅特性

本专栏文章列表 一.何为面向对象 二.C语言也能实现面向对象 三.C++中的不优雅特性 四.解决封装,避免接口 五.合理使用模板,避免代码冗余 六.C++也能反射 七.单例模式解决静态成员对象和全局对象的构造顺序难题 八.更为高级的预处理器PHP 三.C++中的不优雅特性 今天来说一说C++中不优雅的一些问题,C++虽然是面向对象的设计语言,但也有很多缺陷和弊病,我们将会讨论如何通过良好的设计解决这些问题. C++编译缓慢 C++编译慢已经成为了业界共识,一个大型C++项目甚至要用专用的服务器编

C和C++的面向对象专题(9)——Gtkmm的最佳实践

本专栏文章列表 一.何为面向对象 二.C语言也能实现面向对象 三.C++中的不优雅特性 四.解决封装,避免接口 五.合理使用模板,避免代码冗余 六.C++也能反射 七.单例模式解决静态成员对象和全局对象的构造顺序难题 八.更为高级的预处理器PHP 九.Gtkmm的最佳实践 九.Gtkmm的最佳实践 在跨平台的gui开发中,Qt一直是非常受欢迎的GUI开发框架,但Qt一个是依赖反射,需要特殊的预处理步骤,一个是库太过庞大,这就造成了一些不便的地方.今天介绍给大家的是Gtk库的C++绑定,Gtkmm

C和C++的面向对象专题(7)——单例模式解决静态成员对象和全局对象的构造顺序难题

本专栏文章列表 一.何为面向对象 二.C语言也能实现面向对象 三.C++中的不优雅特性 四.解决封装,避免接口 五.合理使用模板,避免代码冗余 六.C++也能反射 七.单例模式解决静态成员对象和全局对象的构造顺序难题 八.更为高级的预处理器PHP 七.单例模式解决静态成员对象和全局对象的构造顺序难题 上回书说道,我们的程序有一个隐藏的漏洞,如果ClassRegister这个类所在的.o文件,如果在所有.o文件中是第一个被链接的的,那么就不会出问题. 这么说太抽象了,让我们画个图表 ClassRe

C和C++的面向对象专题(6)——C++也能反射

本专栏文章列表 一.何为面向对象 二.C语言也能实现面向对象 三.C++中的不优雅特性 四.解决封装,避免接口 五.合理使用模板,避免代码冗余 六.C++也能反射 七.单例模式解决静态成员对象和全局对象的构造顺序难题 八.更为高级的预处理器PHP 六.C++也能反射 今天我们来探讨C++的反射问题,缺乏反射机制一直是C++的大问题,很多系统的设计时,需要根据外部资源文件的定义,动态的调用内部的函数和接口,如果没有反射,将很难将外部的数据,转换为内部的方法. Java和.net的反射机制很容易实现

C和C++的面向对象专题(5)——合理使用模板,避免代码冗余

本专栏文章列表 一.何为面向对象 二.C语言也能实现面向对象 三.C++中的不优雅特性 四.解决封装,避免接口 五.合理使用模板,避免代码冗余 六.C++也能反射 七.单例模式解决静态成员对象和全局对象的构造顺序难题 八.更为高级的预处理器PHP 五.合理使用模板,避免代码冗余 下面我们来讨论一下,如何解决模板的不易封装的问题. 我们提供这样一种思路,对于链表一类的通用类型,我们尽量采取强制类型转换的方式,尽量避免模板的滥用. 同样,我们应该避免对结构体的直接存储,尽量使用类似java的指针传递

C和C++的面向对象专题(4)——解决封装,避免接口

本专栏文章列表 一.何为面向对象 二.C语言也能实现面向对象 三.C++中的不优雅特性 四.解决封装,避免接口 五.合理使用模板,避免代码冗余 六.C++也能反射 七.单例模式解决静态成员对象和全局对象的构造顺序难题 八.更为高级的预处理器PHP 四.解决封装,避免接口 恩,今天我们来讨论,如何通过设计,解决C++中的不优雅特性,改进项目的结构,改善编译速度. 上次我们提到,如果一个类的封装不好,容易导致种种不便,那么如何设计能够避免这种现象呢? class test { public: voi

面向对象程序设计介绍以及面向对象的基本特征

面向对象的程序设计(Object Oriented Programming,OOP)方法是目前比较流行的程序设计方法,和面向过程的程序设计比,它更符合人类的自然思维方式.在面向过程程序设计中,程序=数据+算法,数据和对数据的操作是分离的,如果要对数据进行操作,需要把数据传递到特定的过程或函数中.而在面向对象程序设计中,程序=对象+消息,它把数据和对数据的操作封装在一个独立的数据结构中,该数据结构称作对象,对象之间通过消息的传递来进行相互作用.由于面向对象本身固有的特性,使得面向对象程序设计已经达