数据流中,用标有名字的箭头表示数据流
程序流程图中,用标有名字的箭头表示控制流
对象的基本特征点:标识唯一性、分类性、多态性、封装性、模块独立性好
结构化程序设计的思想包括:自顶向下,逐步求精,模块化,限制使用goto语句
面向对象基本方法的基本概念有对象、类和实例、消息、继承与多态性。
变量的存储方法分为静态存储和动态存储两大类。
包括4钟:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。
可行性分析阶段产生可行性分析报告。
总体设计阶段产生概要设计说明书。
概要设计阶段编写集成测试计划。
需求分析阶段产生软件需求规格说明书,是后续工作如设计、编码等需要的重要参考文档。需求分析阶段可以使用的工具有数据流图DFD图,数据字典DD。判定树和判定表。
算法的空间复杂度是指算法在执行过程中所需要的内在空间。
控制格式输入/输出的操作符中:
iomanip中定义的操纵符包括:setfill(ch)用ch填充空白、setprecision(n)将浮点精度置为n、setw(w)、读写w个字符的值、showpoint设置小数点。
数据库的传统集合运算(并、差、交、笛卡尔积)和专门的关系运算(选择、投影、连接、除运算)
冒泡排序与简单插入排序与简单选择排序在最坏情况下均需要比较n(n-1)/2次
堆排序在最坏情况下需要比较的次数是nlog2n(2为对数底)
eof()函数可以检测是否到达文件尾
对磁盘文件进行流操作时,必须包括头文件fstream
以ios_base::out模式打开的文件不存在时,将自动建立一个新文件
内联函数是通过编译器来实现的。
一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,所以在调用时不发生控制转移。即类似于宏。
在类内部实现的函数都是内联函数,可以不用inline定义;只有在函数外部定义的内联函数才必须加关键字inline。编译系统并非对内联函数必须使用内联,而且根据具体情况决定。
内联函数不是必须要有返回值的。
运算符重载的一些规则:
(一)
1.一般情况下,单目运算符最好重载为类的成员函数,双目运算符最好重载为类的友元函数。
2.双目运算符“=、()、[]、->”只能被重载为类的非静态成员函数,不能重载为类的友元函数。
3.类型转换函数只能定义为一个类的成员函数,而不能定义为类的友元函数
4.若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好
5.若运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数
6.当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对象的引用);如果左边的操作数必须是一个不同类的对象,或者是一个内部类型的对象,该运算符函数必须作为一个友元函数来实现。
(二)
1.C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。
2.C++不能重载的运算符只有5个,即".(成员访问运算符)"、".*(成员指针访问运算符)"、"::(域运算符)"、"?:(条件运算符)"、“sizeof(长度运算符)”。
3.重载不能改变运算符运算对象的个数。
4.重载不能改变运算符的优先级和结合性。
5.重载运算符的函数不能有默认的参数。
6.重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是C++的标准类型。
(三)
运算符重载为成员函数时,会省略一个参数,如果无参数,表明是一元运算符。
一元运算符既可以作为成员函数重载,也可以作为非成员函数重载。
二元运算符如果作为非成员函数,则参数表中必须有两个参数。
赋值运算符、下标运算符、函数调用运算符只能作为类的成员函数重载。
是指同一个函数名可以对应着多个函数的实现。每种实现对应着一个函数体,这些函数名字相同,但是函数参数的类型不同,还允许参数的个数不同,但不能只有函数的返回值类型不同而参数的个数和类型相同的重载。
常对象只能调用它的常成员函数,而不能调用非const函数,常对象的成员函数不一定都是常成员函数,只需保证其数据成员是常数据成员即可。
常成员函数只能引用本类中的数据成员,而不能修改它。
在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数。(纯虚函数是在声明虚函数时被 “初始化”为0的函数)
虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public。如果一个类包含了纯虚数,称此类为抽象类。
抽象类不能被实例化。
作为虚基类的类可以被实例化。
【例】
1.题中定义一个派生类对象B,并使用类A的对象指针指向B,由于基类A中的func1为虚函数,所以会执行派生类的func1,输出B1,而基类中的func2不是虚函数,所以p->func2()会执行基类中的func2,输出A2。
公用继承中,基类的公用成员和保护成员在派生类中保持原有的访问属性,其私有成员仍为基类私有。
私有继承方式为基类的公用成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有,但派生类对象可以访问基类的保护成员,所以基类对象不能赋值给派生类对象。
三种继承方式中,派生类继承了基类的私有成员,但不能被直接访问,可以通过派生类的友元函数去访问基类的私有函数。
类的数据成员不能在声明类时初始化
类定义中包括数据成员和函数成员的声明
类的成员的缺省访问权限是私有的,数据成员可以是私有的,可以是公有的,也可以是受保护的。
诶的成员函数可以在类内定义。
类模板的定义和声明都以关键字template开头。关键字后面是一个用逗号分隔的模板参数表,用尖括号<>括起来,这个表被称为类模板的模板参数表。类模板是类的抽象,类是类模板的实例。类模板使类中的一些数据成员和成员函数的参数或返回值可以取任意的数据类型。
顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的。
链式存储结构既可以针对线性结构也可以针对非线性结构。
链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间。
对象指针数组并没有实际占用空间,不会执行析构函数
定义对象指针,并不会调用构造函数。
#include
#include
using namespace std;
class TV{
public:
TV(int s=41):size(s){cout<<'N';}
TV(const TV&t):size(t.size){cout<<'C';}
~TV(){cout<<'D';}
void Print() const {cout<Print();
delete room3;
system("pause");
return 0;
}
运行结果:
NCN54D
参考答案:
NCN54DDD
解析:
本题中定义一个对象room1,输出N,定义room2时输出C,定义room3是输出N,然后执行room3.Print时,输出54,最后执行三个析构函数输出DDD。
在以下3种情况下使用:
1.程序中需要新建立一个对象,并用另一个对象对它初始化;
2.函数的参数为类的对象;
3.函数的返回值是类的对象。
概念模式:数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。
外模式也称子模式或用户模式,是用户的数据视图,给出了每个用户的局部数据描述。
内模式也称物理模式,给出了数据库物理存储结构和物理存取方法。
软件需求的增长得不到满足;软件开发成本和进度无法控制;软件质量难以保证;软件不可维护或维护程度非常低;软件的成本不断提高;软件开发生产率的提高赶不上硬件的发展和应用需求的增长。