第7章 库
库是按照可重用的方式组织的代码模块组。库中通常包含已经设计,测试和编译过的代码,您可以轻易地将库中的代码链接到应用程序中。库是一个包含几个已编译文件的文件,为了便于编译器定位符号和他们的定义,所有库文件都建立了索引。
2。编译时依赖与链接时依赖有何不同?
如果为了完成编译必须将ProgElement1.h包含在ProgElement1.cpp中,则这种依赖关系是编译时依赖。
如果目标文件ProgElement2.o包含了ProgElement1.o中定义的符号,那么这种依赖关系称为链接时依赖。(前置声明)。
第9章 QObject
1。如果objectA是objectB的父对象,其含义是什么?
2。当一个QObject重新选择父对象时,会发生什么事情?
给某个对象设置父对象将会隐含地把此添加到它父对象的子对象列表中
objA->setParent(objB);//把objA指针添加到objB
objA->setParent(objC);//把objA指针添加到objC
那么objA的指针就会从objB的子对象列表中移出,然后添加到objC的子对象列表中,我们把这种行为叫做重新认父。
父子关系是为了描述对象运行时的约束和管理关系;基类派生类关系是编译时判定的一种静态关系。
3。为什么QObject的复制构造函数不是公有的?
每一个QObject都至多有一个父对象。如果把QObject看成是一个一个的人,则每个QObject的身份都不同的含义就容易理解了,同样每个QObject都
可以有子对象这一概念也就非常清楚了。
4。什么是组合模式?
组合模式的目的是便于使用简单(组件)部分来创建复杂(组合)对象。其主旨是使用类似于树的结构来表达部分-整体的层次关系。
5。在什么情况下QObject既可以是组合对象又可以是组件对象?
组合对象是包含子对象的类。组件对象是可以拥有父对象的类。
6。如何访问一个QObject的子对象?
findChildren()用来在子对象列表中查找子对象。
QList<Customer*>custlist = parent.findChildren<Customer*>();
foreach (Customer*current, custlist){
qDebug() << current->toString();
}
7。什么是事件循环?它是如何初始化的?
事件循环是一个程序,它能够将事件划分优先级,并排队,分派到某个对象。
8。什么是信号?如何调用一个信号?
信号是类接口的一部分,它类似与函数却无法调用,必须由此类的一个对象发射信号
9。什么是槽?如何调用一个槽?
10。信号与槽是如何进行连接的?
11。信息是如何从一个对象传递给另外一个对象的?
任何拥有信号的QObject都可发射出一个信号,这时就会引起对连接的槽的间接调用。
这种调用是间接的,参数列表是从一个对象向另外一个对象传递信息的方式。
12。一个类继承QObject多次可能会引起问题,在什么情况下会意外地发生这种情况?
如果在实际过程中继承了QObject多次,或者此类不是继承列表中的第一个基类,那么可能会从MOC生成的代码中发现非常奇怪的错误。
13。值类型与对象类型之间有何区别?试给出几个例子。
值类型的事例非常“简单”:占用连续的内存空间,可以快速地进行复制和比较。
对象类型的实例通常要复杂得多,他们要维护某类身份。对象类型通常很少进行复制。