函数重载是的const形参匹配问题

仅当形参是引用或指针时,形参是否为const才有影响。即可把const形参和非const形参视为不同的特征标;

而对于普通变量形参,则不能通过形参是否为const来重载。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
void wtq(char *m)
{
    cout << "char *" << endl;
} 
 
void wtq(const char *m)
{
    cout << "const char *" << endl;
} 
 
int main()
{
    const char p1[10] = "aaaaa";
    char p2[10] = "bbbbb";
    wtq(p1);
    wtq(p2);
}

输出结果为:

const char *

char *

而对于普通变量形参,则会报错:提示重定义。

另外注意几点:

1.重载时,类型引用和类型被视为同一特征标。

2.不能基于指针本身是否为const去实现函数的重载。

软件设计中的“自顶而下”和“自下而上”

在切入主题之前先要了解“上”与“下”的含意是什么,这需要从图1中找答案。图中,应用层在最上面,其下依次是框架、平台、库和操作系统层,因此“上”是指靠近应用层,而“下”则是指靠近操作系统层。

图1
     对于一个被设计的软件模块,存在两个视角。一个是从上向下看,这一看,看到的是模块向上层提供的是什么样的接口,或者说“长什么样”;另一个则是从下向上看,即模块的具体实现是什么,是如何通过使用其下的库(或其它的模块)来塑造它自己的“模样”的。
     那一个软件模块的设计之初,是应当自上而下呢,还是自下而上?
     软件设计最为重要的是塑造形象,即打算将软件设计成什么样,这是软件设计阶段真正要做的事。软件设计时,最重要的不是数据结构的组织,而是形象塑造,当形象有了以后,数据结构的组织就是一件很自然的事了。因此,软件设计应当先是“自上而下”。显然,光有自上而下也不行,当塑造好了模块的形象以后,还得“自下而上”地考虑如何去实现被设计模块。自下而上时还可以审视,现有的哪些模块能被将要设计的模块所重用,从而提高现有软件模块的复用性。
     宏观上讲,两种方法各有特点。自上而下更容易把握整体性,但难度更大,成本也相对高;而自下而上则更容易做到复用,进而获得更好的经济性。在进行软件设计审查(注意,不是代码审查)时,审查者需要注意,不能从自下而上的角度去审视被审查的设计,相反,应当采用自上而下的方式,检查被审查的模块是否很好地体现了它的概念或“模样”。

以上转载至http://yunli.blog.51cto.com/831344/339540

中国有句俗语:

形而上者谓之道,形而下者谓之器
在软件设计中也有类似的意思:
自上而下谓之道
自下而上谓之器

Qt demo — 2.TextEdit

这个demo在Qt demo里是Main Windows里的Application。

截图:

textEdit

知识点:

1.Q_INIT_RESOURCE
    Initializes the resources specified by the .qrc file with the specified base name. Normally, Qt resources are loaded automatically at startup. The Q_INIT_RESOURCE() macro is necessary on some platforms for resources stored in a static library.

2.QSettings class
    app.setOrganizationName(“CppLeYuan”);
    app.setApplicationName(“TextEdit”);

 3.事件的accept()和ignore()

Setting the accept parameter indicates that the event receiver wants the event. Unwanted events might be propagated to the parent widget.

Setting the ignore parameter indicates that the event receiver does not want the event. Unwanted events might be propagated to the parent widget.

在豆子博客第20篇讲的不错:

http://devbean.blog.51cto.com/448512/225519

 

4.Qt打开文件的函数QFileDialog::getopenFileName()

注意里面的参数。

 

5.saveAs()和saveFile()的不同应用

注意saveAs调用getopenFileName(),而saveFile是通过file.open打开。

 

6.QMessageBox的使用

1
2
3
4
5
StandardButton QMessageBox::warning ( QWidget * parent,
                                      const QString &amp; title,
                                      const QString &amp; text, S
                                      tandardButtons buttons = Ok,
                                      StandardButton defaultButton = NoButton )

 

7.setWindowModified函数的使用

 

8.新建QAction

新建QAction,以及设置快捷键setShortcuts,设置提示信息setStatusTip,最后连接信号和槽。

eg.

1
2
3
4
    newAct = new QAction(QIcon(":/images/new.png"), tr("&amp;New"), this);
    newAct-&gt;setShortcuts(QKeySequence::New);   
    newAct-&gt;setStatusTip(tr("Create a new file"));   
    connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));

 

9.通过addMenu新建QMenu,并且添加QAction

eg.

1
2
3
4
    fileMenu = menuBar()-&gt;addMenu(tr("&amp;File"));
    fileMenu-&gt;addAction(newAct);
    fileMenu-&gt;addAction(openAct);
    fileMenu-&gt;addAction(saveAct);

 

10.通过addToolBar新建toolBar,并且添加QAction

1
2
3
4
    fileToolBar = addToolBar(tr("File"));
    fileToolBar-&gt;addAction(newAct);
    fileToolBar-&gt;addAction(openAct);
    fileToolBar-&gt;addAction(saveAct);</span>

 

11.statusBar()的使用

 

12.保存和设置用户偏好。

自定义函数readSettings和writeSettings这块还不懂。加亮做个记号!

 

13.关于信号槽机制与事件的区别。

这一块暂时还未完全明白。最近一段时间还得在坛子里向其他高手多请教一下,然后另开帖详细总结。

而且《C++ GUI With Qt4》第七章的ticker代码是一个理解事件不错的代码。

 

总结:

总体来说,这个demo值得多多分析几次,在Qt demo的Main Windows里面,还有其他几个诸如MDI,如何保存最近打开一项等等功能,这些都可以最后结合在一起,实现一个完整的TextEdit纯文本编辑器。

Qt demo — 1.Screenshot

最近很纠结,每天要背100多个单词,而且计算机专业课的几本书还得一天看几十面,除了数据结构外,其余三本都是小白,时间分配严重不合理,但又找不到一个十全十美的方法,最近ACM又开始废弃了,就连C++也开始淡忘了~~~真不知如何是好。

Qt也感觉到了一个瓶颈,我现在能理解为什么还有好多人学MFC了,Qt的资料和MFC的资料完全不是一个概念的,Qt的资料就我知道的只有4~5本,《C++ Gui With Qt4》是公认不把书翻烂是无法看懂的,《精通Qt4编程》是国人的一本书,想买,但是看见网上评价一般,有点打酱油的感觉,而且貌似最近出的第二版内容没变,价格却增加了20多元,真是服了~~~还有一本《The Book of Qt4:The Art of Building Qt Applications》,貌似市面上没卖的,准备去打印一本….Qt官方的白皮书《Qt White Paper》已经打印了一份看,和《C++ GUI With Qt 4》差不多,现在按照前人的经验,多多捉摸自带的demos和documents,否则真的无法理解什么是event等等~~~

今天看了Desktop下的Screenshot(全屏的屏幕截图软件),感觉很有意思,最关键的是代码简单,适合入门学习。
整体分析一下:

1.这个Screenshot继承自QWidget,由三部分组成,一个是screenshotLabel(用于显示图片),一个是optionsGroupBox(作为delaySpinBox等的框架),一个是buttonsLayout(作为new, save, quit按钮的布局)。

2.screenshotLabel中放入的是一个QPixmap部件,QPixmap可以显示图片。

3.它自己实现了一个新建button的函数,用于生成button并做一些必要的初始化及连接信号和槽。

4.它实现了一个延迟,可以在设置的秒数后再截图。而Hide This Window的CheckBox则可以选择是否在截图时隐藏这个截图软件。

5.这个程序最主要的就是用了QPixmap::grabWindow这个函数,抓取图片的。

下面是软件的截图:

代码就不上传了,在Qt Demo里可以找到~~~

推荐一款GTD软件—Doit.im

看过《Get things Done》的朋友应该知道GTD是什么,对!就是这本书的首字母简称,它也是代表了一种时间管理的方法,两年前曾经接触这个概念,但是只有英文版的实体书卖,因为价格颇贵,所以只在网上下了电子版的。运气比较不错,去年6月份左右,一家出版社出版了这本书的中文版。推荐大家去买一本看看,我今年寒假在家也买了一本,好像只要20元左右,价格很便宜。

这里主要是给大家推荐这款软件。

大致的把网站的教程转载下来,大家也可以无需买书,就可以整体的知道GTD为何物。

————————————华丽的分割线————————————–

下载地址:https://i.doit.im/

GTD , get things done(完成每一件事),是一个被广泛采用以高效无压的工作为目的的时间和任务管理系统。

GTD的两个关键目标是:

1. 把一切要处理的事情,不论现在或将来的,不论大小简繁的统统从大脑中移出,记录在笔记本或某个软件中。

2. 严格要求自己在记下这些事情的同时,对这些事情做出决定(什么时候做?谁来做?)。

这样在任何时候,您都可以把握事情下一步的发展,以作实施或重新安排。

GTD的流程如下:

Doit.im 的主要特色:

  1. Doit.im 凝聚了GTD的基本原则,并且在执行GTD思想的过程中为用户提供了各种便捷的工具,引导用户更好的将GTD的思想和行为融入到实际的生活工作中。
  2. Doit.im是基于网络使用,利用中心服务器进行信息的存储和交互,提供安全的在线数据存储。
  3. 支持不同操作系统(Windows、Linux、Mac OS)使用和不同在线客户端(如您的家庭电脑与公司电脑)的同步,保证用户在任何客户端都能正确的看到所有信息。
  4. 即将发布手机版本Doit.im,可以随时同步手机与电脑上的待办事项。

点击查看原始尺寸

Doit.im 的工作流程

  1. 收集(Collect)

GTD的第一个步骤,将各种各样的任意想法从脑中揪出来,包括各项工作事务或生活琐事,从拟定将月营业额翻番的计划,到买一盒订书针,统统写下来,不要让大脑中残留任何的想法,以防止注意力被分散,不能集中精力做好当前的事情。

当您开始专注于写下脑中所有的事情时,大脑会快速运转,灵光往往忽然乍现,一个快速的记录工具必不可少。为了既可以防止遗漏任何的思想细节,又可以快速的记录脑中的所有的事情,Doit.im 在收集箱中提供快速新增栏,您可以输入待办事项的主要内容后回车即保存,并快速记录下一个待办事项。

点击查看原始尺寸

此外,当您在其他的Doit.im其他的页面浏览或工作时,有个新的想法突然冒出来,比如“到超市买香草和巧克力的冰激凌”,或者“这周末吃个火锅吧”,快捷键Ctrl+n 或者点击页面下方的新增按钮,一个新增输入框会弹出,写下您的计划,并做安排吧。

点击查看原始尺寸

2. 处理(Process)

GTD的第二个步骤,即快速判断该任务的所有信息:我需要尽快做它么?真的有必要完成这件事情么?我是最适合完成它的人么?办公室的小陈应该可以更快更好的完成它。演唱会在本月5号?我要为它安排好时间!为了防止您继续被大量的未处理事情分散精力,您需要根据需要及时的清空收集箱。面对收集箱中一堆未处理的事情,也许您会有抵触的情绪,“天啊,居然这么多的事情要做!”GTD中一个重要原则是“两分钟原则”,即任何可以在两分钟内完成的事情就马上完成,因为生活和工作中的确有许多事情是几分钟就搞定了的,譬如,打个电话订机票。于是收集箱中的待办事项数量会减少很多。

Doit.im中,为您的思想活动提供了便捷的工具和醒目的分类,来引导您完成事项的处理过程。需要尽快完成产品的详细方案?两天后老板就要检查了。今天开始吧!将这条事项拖到今日待办中就可以了。您还可以为它设置过期时间,对了,就是两天后,Doit.im告诉您还剩两天了,要抓紧啦。

点击查看原始尺寸

今年要考取驾照?最近太忙了,以后再说吧。于是将这条事项拖到择日待办,有时间的时候可以来制定一下计划。

点击查看原始尺寸

选择英语口语辅导班?对,要尽快找到合适的,编辑它的内容,并且将它拖到行动列表中,因为这里罗列了所有您需要尽快完成的重要事项。

点击查看原始尺寸

需要转发给小陈?在转发栏中输入小陈的邮箱地址就可以了。如果将被转发的待办事项拖动到别的箱子(例:明日待办)中,则对方也会在相应的箱子(例:明日待办)中看到该待办事项。

点击查看原始尺寸

3. 组织(Organize)

GTD中提出了建议的列表集合,来跟踪需要关注的事项和项目。1. 下一步行动,即需要尽快完成的重要事项,是您工作的焦点。2. 项目,需要多个步骤完成的待办事项,是纵向管理任务的方式。3. 将来/可能,以后也许会有时间做的事项。

Doit.im中的行动列表就是您最需要关注的事项列表,其中罗列了所有ASAP(as soon as possible)的事项。

点击查看原始尺寸

Doit.im中的分组管理中,可以创建和管理您的分组。将箱子中的待办事项拖动到分组中,则该待办事项会被标识为属于该分组。分组下的各个待办事项都可以分别作安排,兼有灵活性和实用性。

点击查看原始尺寸

Doit.im中的日程,显示了所有您安排好执行时间的待办事项,表示在某天您将开始做这件事情,一目了然的看到明天之后所有的需要及时开始的事项。您也可以设置重复的事项,使其在指定的日期生成待办事项。

点击查看原始尺寸

点击查看原始尺寸

点击查看原始尺寸

4. 回顾(Review)

为保证整个GTD系统的有效性,您需要定时及时的回顾每天的行为,了解计划的进度,掌握工作和生活的发展,主动而不是被动的安排工作和生活,以真正提高工作效率和获得高质量的生活。

Doit.im中分类鲜明、重要性分明的箱子中,行动列表、日程、择日待办是需要您定时维护和回顾的。我们推荐您每天回顾行动列表和日程以保证这些重要的或紧急的待办事项的确已经安排妥当,并且相关的信息都已经补充完整,当您开始做这项事情时,您不会对下一步的发展产生不确定的分散性思维。有良好每天回顾的人,会需要为明天的安排做好准备。Doit.im中的明日待办,其一个目的就是让用户在每天回顾的时候,能够将脑中的安排快速的拖动到明日中。

择日待办在一般时候都是在您的视线之外,但是也至少需要每周回顾,另作安排,来保证它们不会突然跳到您的脑海中,分散您的精力。

点击查看原始尺寸

5. 执行(Do)

整个GTD系统的目的就是为了让您能够更快更好的做完每一件事,这是一个GTD系统的价值体现之处。

Doit.im 帮助您在合理安排好事项后,快速的完成待办事项。利用快捷按钮快速的完成待办事项。

点击查看原始尺寸

点击查看原始尺寸

总结

Doit.im作为一款免费而强大的任务管理系统,深度的挖掘了GTD的思想,致力于为人们带来无压高效的任务管理体验。Doit.im的手机版将于下个发布日推出,届时大家可以将这款小巧而便捷的任务管理工具随身携带了。

Doit.im 1.0 仅仅是Doit.im的开始,而且随着1.0的发布,我们收到了越来越多的用户的发馈与支持,今后发布的新版本必定会在此基础上增加更多改进更多。我们有理由相信, Doit.im 将会成为最好的任务管理软件。