规则 :
构造函数名由类名加 "_ctor" 组成 , 析构函数由类名加 "_dtor" 组成 .
1. 构造函数由 new 函数调用 . 用于初始化成员方法指针 .
2. 析构函数由 delete 函数调用 . 用于释放类对象动态开辟的内存 .
3. 子类构造函数调用前 , 要调用父类构造函数 .
4. 子类析构函数调用后 . 要调用父类析构函数 .
5. 如果不用 new 和 delete 来生成和销毁对象 , 那么它的构造、析构函数要手工调用 .
6. 宏定义用 "BASED_" 加类名 . 在派生子类的时候这个表示父类的宏要写在第一位 . 顺序很重要 .
7. 成员函数调用的第一个参数为对象的指针 . 因为没有系统提供的 this 指针 . 就只能自己传递了 .
8. 公共成员函数只要声明在对应头文件里就可以了 , 私有的成员函数只写在 c 文件里 , 定义成 static 类型 .
9. 虚表名称用类名加 "_vt" 组成 . 其声明和定义方法同 类 的方法 .
10. 每个类的第一成员是虚表指针 .
11. 用一个宏实现通过类指针来调用对象的虚成员函数 .
12. 类的私有数据成员是类的一个 void 类型指针 . void* private; 它在每个类自己的构造函数里初始化 , 只有自己的类才知道它是一个什么样的指针 [ 可能是结构体指针哦 .]
声明一个类 A, 如下方法 :
class{
#define BASED_A/
int i;/
int j;
BASED_A
}A;
如果不写宏 , 则该类是不可继承的 .
由 A 类派生 B 类的方法如下 :
class{
#define BASED_B/ // 这里定义这个宏 , 用来派生新的类 .
BASED_A/ // 父类
int a;/
int b;
BASED_B
}B;
虚表的定义 :
virtual_tab{
#define BASED_CLASSNAME_vt/
void (*func1)();
BASED_CLASSNAME_vt
}ClassName_vt;
优点 : 使用这个方法可以用纯 C 实现面向对象思想编程 .
可以实现多态 :
1. 规则 3 保证多态的正确性 . 即父类初始化了成员函数后又被子类重新修改 . 那么在调用的时候就会调用到子类的实现 .
缺点 :
1. 不能实现多继承 .// 不过多继承使用的不多 , 也不被广泛提倡 .
2. 这种写法让编辑器无法智能提示类成员 . 使得程序员编写代码时要很清楚类的成员 .
3. 没有系统提供的 this 指针 , 需要调用时传递 .
Designed by o07sai.
矩阵运算之 —[ 求逆 ]
全选主元高斯 - 约旦消去法
[摘选自: C常用算法程序集-徐士良(源程序) ]
一、 功能
用全选主元高斯 - 约旦 (Gauss-Jordan) 消去法同时求角系数矩阵相同而右端具有 m 组常数向量的 n 阶线性代数方程组 AX=B. 其中
二、 方法说明
全选主元高斯 - 约旦法的步骤如下 :
对于 k 从 0 到 n-1 作如下变换 :
(1) 全选主元
从系数矩阵 A 的第 k 行、第 k 列开始的右下角子阵中选取绝对值最大的元素 , 并通过行交换 ( 列交换 ) 将它交换到主元素的位置上 .
(2) 归一化
(3) 消去
最后对 B 进行恢复 , 则 B 中的每一列即为每一个方程组的解 .
上面解方程的过程中其实包含了矩阵求逆了 . 把 B 看成是单位矩阵,那么X就是A 的逆 .此时 m=n. 这样 . 用上面的方法 , 按三步进行 , 就可以求矩阵 A 的逆了 . 不需要最后一步 .
源码下载地址 : http://download.csdn.net/source/2206411
或是在www.csdn.net 资源下载中搜索关键字: 面向资源 矩阵运算 也可找到.