1,在需求分析阶段可以使用DFD图和,数据字典DD,以及判定树与判定表。
2,指向常量的指针可以不初始化:const double *point; 指针常量需要初始化:double *const point;
3,单目运算符--->成员函数,双目运算符(除了=,(),->,[ ])--->友元函数
4,需要调用拷贝构造函数:1 函数的参数是类的对象;2 函数的返回值是类的对象;3 定义一个新的对象,用另一个对他初始化;
5,常对象只能调用它的常成员函数
6,程序中的typename都可以替换成class; 但是class不可以替换成typename;
7,任意一颗 二叉树度为0的叶子节点总比度为2的叶子节点多1;
8,模块化的耦合性,内聚性;耦合性:各个模块之间互相联系的紧密程度;内聚性:模块内部各个元素结合的紧密程度;最好做到高内聚低耦合;
9,投影运算:对于关系内的域指定可以引入新的运算;
10,不能被重载的5个运算符: . * :: ?: sizeof
11,派生类是从已有的类复制他的属性,函数;若基类未缺省构造函数,则在派生类中要重新定义;建立派生类对象时,先调用基类的构造函数,再调用派生类;销毁派生类对象时,先销毁派生类,再基类;
12,对象指针不调用构造函数*p[4];
13,PAD是问题分析图,软件设计需求方面;E-R是数据库的关系图:shi'ti实体集用矩形,椭圆是属性,联系是菱形;
14,只有类的非静态成员函数才有隐含的this指针,其作用域是类的内部;
15,派生类的基类的基类是这个派生类的虚基类;
16,虚函数:在基类中用virtual定义,在派生类中再次定义的函数;
17,内联函数:这个函数一般比较短小,被调用的时候主函数不会跳转到这个函数中,而是直接将这个函数的代码下载到自己函数主体中。
在函数定义前加上inline就行:inline void function(){};
18,传递参数时,若形参是指*针,则实参对应是地址引&用;若形参是地址引用,对应实参是值;
19,运算符重载的时候会省略一个参数,所以如果是一元运算符则只有一个参数;一元运算符可以作为成员函数和非成员函数,
二元运算符作为非成员函数,必须有两个参数;
20,友元函数:虽然不是类的成员函数,但是可以访问类的成员;
21,const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。
22,引用静态成员函数两种方法:1,类名::静态成员函数名(Constants::getPI()), 2,对象名.静态成员函数名(object.getPI());
23,拷贝构造函数:也称复制构造函数,当对象的参数是另一个对象时,调用。一般的形式为:
class 类名
{
类名(形参参数){构造函数的声明}
类名(类名&对象名){拷贝构造函数的声明};
}
class ClassName
{
ClassName(int x){ };
ClassName( ClassName&obj){ };
}
24,虚基类:B继承至A,两者都有一个相同的虚基类,B调用同样的函数,若函数中的参数是普通的值,则执行的函数来自A,若参数是地址引用,则执行的函数来自于B;
25,初始化构造函数列表:
class Lei{
public:
int x, y;
Lei(): x(8), y(9) { };
//相当于
Lei(){
x=8;
y=9;
}}