- 浏览: 27376 次
- 性别:
- 来自: 南京
最新评论
-
sankooc:
小问一下js里等号比较的是什么 值 还是?
JavaScript面向对象程序设计(8): 优雅的封装还是执行的效率? -
jessige_27:
zzhonghe 写道jessige_27 写道
但是 差别 ...
JavaScript面向对象程序设计(8): 优雅的封装还是执行的效率? -
mikeandmore:
七猫 写道boost现在有ui解决方案了?
winx可能是类w ...
Qt学习之路(1):前言 -
mikeandmore:
...
Qt学习之路(1):前言 -
ray_linn:
mikeandmore 写道smiletuna 写道Qt是na ...
Qt学习之路(1):前言
文章列表
前面我们已经看到了怎样使用标准的 C++ 代码以及 Qt 提供的 API 来达到信息隐藏这一目标。下面我们来看一下 Qt 是如何实现的。
还是以 QObject 的源代码作为例子。先打开 qobject.h,找到 QObjectData 这个类的声明。具体代码如下 ...
下面在上一篇的基础上,我们进入Qt的源代码,看看Qt4.x是如何实现 Private Classes 的。
正如前面我们说的,或许你会看到很多类似 Q_D 或者 Q_Q 这类的宏。那么,我们来试着看一下这样的代码:
void MyClass::setFoo( int i )
{
Q_D(MyClass) ...
如果你阅读了 Qt 的源代码,你会看到一堆奇奇怪怪的宏,例如 Q_D,Q_Q。我们的Qt源码之旅就从理解这些宏说起。
下面先看一个C++的例子。
class Person
{
public:
Person(){}
~Person(){}
string name();
void setName(string name);
int age();
void setAge(int a);
private:
string _name;
int _age;
};
这是一个很普通的 C++ 类 Person,他有两个属性 name 和 ag ...
本来打算把《Qt学习之路》作为一个类似教程的东西,所以就不打算把一些关系到源代码的内容放在那个系列之中啦。因此今天就先来看一个新的开始吧!这个系列估计不会进展很快,因为最近公司里面要做 flex 的项目演示,所以时间不是很多啦,并且源代码也不是那么容易看的。豆子也不是 C/C++ 出身,因此看起来也会有些麻烦。
《Qt源码剖析》作为一个独立的系列,大致就是对Qt的源代码进行分析。个人以为,分析的目的不在于你去写一个Qt出来,而是学习它的设计巧妙之处。正如我们去学习编译器的设计与实现,也并不是非要写一个编译器出来,而是学习到很多有用的算法和设计思路。这些才是更加需要注意的,也是比起写一个Q ...
Qt是一个著名的C++库——或许并不能说这只是一个GUI库,因为Qt十分庞大,并不仅仅是GUI。使用Qt,在一定程序上你获得的是一个“一站式”的服务:不再需要研究STL,不再需要C++的<string>,因为Qt有它自己的QString等等。 ...
优雅的封装还是执行的效率?这是一个悖论。
优雅封装的程序看起来是那么的美妙:每个属性被隐藏在对象之后,你所能看到的就是这个对象让你看到的,至于它到底是怎么操作的,这个不需要你操心。
执行的效率就是另外一回事。就像是C语言和面向对象的C++之间的差别:C++很优雅,但是执行效率,无论是编译后的二进制代码还是运行期的内存的占用,都要比简单的C语言多出一截来。
这个问题在脚本语言中显得更加重要,因为JavaScript根本就是一种解释语言,解释语言的执行效率要比编译语言低很多。
1. 优雅的封装
我们先来看看变量封装。这里的变量不仅仅是属性,也包括函数。
...
闭包这个概念看上去很深奥,这个词在离散数学里面的意思确实比较难于理解。在这里,我们先可以把闭包理解成是一种匿名函数或者匿名类。
1. 什么是闭包?
什么是闭包?一种正式的解释是:所谓闭包,指的是一种拥 ...
封装是面向对象的重要概念之一。如果一个程序没有封装性,也就谈不上什么面向对象。但是,JavaScript并不像其他的语言,比如Java,有公有变量和私有变量等;在JavaScript中只有一种作用域:公有作用域。在本章中,我们将会见 ...
类是面向对象程序设计的核心概念之一。一个类代表了具有相似属性的一类事物的抽象。从本篇开始,我们将正式的进入JavaScript的面向对象部分。首先需要注意的是,在JavaScript中并没有“类”这一关键字——在大多数语言中都是使用class作为关键字的。所以,这里的类就成了一个概念,它没有明确的语法标志。
1. 类和构造函数
前面说过,在JavaScript中并没有明确的类的概念。实际上,我们给出的只是类的构造函数。类的构造函数构成了这个类的全部内容。既然叫做构造函数,它也是一个普通的函数,没有什么不同之处。因此,我们能够很轻易的定义出一个构造函数:
function ...
在很多语言中,函数(Java里面成为方法)和对象时截然不同的两种东西。函数被定义为对象的动作,或者是全局的(像在C++中的main函数一样)。但是在JavaScript中,函数和对象的界限却显得不那么明显。
1. 函数的定义
JavaScript ...
1. 对象
对象是面向对象程序设计的基础概念之一,只需看看这个名字就已经知道了。在我们熟悉的面向对象语言中,比如Java或者C++,都有着类似的对象定义方法。比如,我们想定义一个类,名字叫Person,有两个属性:name和age,另外有一个方法,将显示出这个Person对象的名字和年龄,那么我们可以用下面的代码实现:
public class Person {
private String name;
private int age;
public String getName() { ...
或许你会奇怪,面向对象的程序设计为什么从数组开始讲起?这是因为……其间的种种关系吧……嘿嘿,这里先卖个关子,先来看看我们熟悉的数组在JavaScript里面是什么样子的。
1. 创建数组
在JavaScript中有很多创建数组的方法。比如使用Array函数。不过这不是现在我们要讲述的。现在我们使用简单的方括号“[]”的办法来创建数组。
var objAyyar = []; // 1
var objAyyar = [2]; // 2
var objAyyar = ["a", "b", "c"]; // ...
1. 基于对象还是面向对象?面向对象技术是现代软件开发中的重要技术之一。面向对象变成的好处毋庸置疑,现在的主流语言如Java、C++都是面向对象的。现在的面向对象理论更多的是使用Java或C++进行描述,究其根源,在于这些语言都是传统的面向对象语言,具有面向对象理论所指明的一切特性:类、封装、继承、多态等等。 相比而言,一些动态语言如JavaSript就显得不那么面向对象——至少,在JavaScript中并没有类class这一关键字。但是,在JavaScript中并不是没有类的概念。于是有人说,JavaScript是基于对象的语言,而不是面向对象的语言。 面向对象的语言具有三个特性:封装、继承和 ...