谁有比较简单的矩阵类库??(散分)

bugzhao 2004-04-16 01:12:01
能实现矩阵的加减、乘、转置就可以
支持double型的
我从网上找了几个,都太复杂了,偶看不懂。。。
而且都是英文的
...全文
38 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
aqfox 2004-04-18
  • 打赏
  • 举报
回复
MATRIX.CPP
#include "MATRIX.h"
MATRIX::MATRIX()
{
n=0;m=0;
}
MATRIX::MATRIX(int a,int b)
{
n=a;
m=b;
data=new (double*[n+1]);
int i,j;
for(i=1;i<=n;i++)
data[i]=new (double[m+1]);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
data[i][j]=0;
}
MATRIX::MATRIX(MATRIX& M)
{
this->m=M.m;
this->n=M.n;
data=new (double*[n+1]);
int i,j;
for(i=1;i<=n;i++)
data[i]=new (double[m+1]);
for(i=1;i<=this->n;i++)
for(j=1;j<=this->m;j++)
this->data[i][j]=M.data[i][j];
}
MATRIX::~MATRIX()
{
int i;
if(n!=0&&m!=0)
{
for(i=1;i<=n;i++)
delete data[i];
delete data;
}
}
MATRIX MATRIX::operator +(const MATRIX& M1)
{
if(M1.n==this->n&&M1.m==this->m)
{
MATRIX ret(this->n,this->m);
for(int i=1;i<=M1.n;i++)
for(int j=1;j<=M1.m;j++)
ret.data[i][j]=M1.data[i][j]+this->data[i][j];
return ret;
}
else
{
cout<<"error"<<endl;
return MATRIX();
}
}
MATRIX MATRIX::operator -(const MATRIX& M1)
{
if(this->n==M1.n&&this->m==M1.m)
{
MATRIX ret(this->n,this->m);
for(int i=1;i<=M1.n;i++)
for(int j=1;j<=M1.m;j++)
ret.data[i][j]=this->data[i][j]-M1.data[i][j];
return ret;
}
else
{
cout<<"error"<<endl;
return MATRIX();
}
}
MATRIX MATRIX::operator *(const MATRIX& M1)
{
if(this->n==M1.m&&this->m==M1.n)
{
MATRIX ret(this->n,M1.m);
double sum;
for(int i=1;i<=this->n;i++)
for(int j=1;j<=M1.m;j++)
{
sum=0;
for(int k=1;k<=this->m;k++)
sum+=this->data[i][k]*M1.data[k][j];
ret.data[i][j]=sum;
}
return ret;
}
else
{
cout<<"error"<<endl;
return MATRIX();
}
}
MATRIX MATRIX::operator /(double d)
{
if(d!=0)
{
MATRIX ret(this->n,this->m);
for(int i=1;i<=this->n;i++)
for(int j=1;j<=this->m;j++)
ret.data[i][j]=this->data[i][j]/d;
return ret;
}
else
{
cout<<"error"<<endl;
return MATRIX();
}
}
MATRIX MATRIX::operator *(double d)
{
if(d!=0)
{
MATRIX ret(this->n,this->m);
for(int i=1;i<=this->n;i++)
for(int j=1;j<=this->m;j++)
ret.data[i][j]=this->data[i][j]*d;
return ret;
}
else
{
cout<<"error"<<endl;
return MATRIX();
}
}
double det(MATRIX M1)
{
if(M1.n==1&&M1.m==1)
return M1.data[1][1];
if(M1.n==M1.m)
{
int sign=1;
double sum=0;
for(int i=1;i<=M1.n;i++)
{
MATRIX M2(M1.n-1,M1.m-1);
for(int j=1;j<=M2.n;j++)
for(int k=1;k<=M2.m;k++)
{
if(k<i)
M2.data[j][k]=M1.data[j+1][k];
else
M2.data[j][k]=M1.data[j+1][k+1];
}
sum+=sign*M1.data[1][i]*det(M2);
sign=sign*(-1);
}
return sum;
}
else
{
cout<<"error"<<endl;
return 0;
}
}
void MATRIX::input()
{
for(int i=1;i<=this->n;i++)
for(int j=1;j<=this->m;j++)
{
cout<<i<<"行"<<j<<"列"<<endl;
cin>>this->data[i][j];
}
}
void MATRIX::output()
{
for(int i=1;i<=this->n;i++)
{
for(int j=1;j<=this->m;j++)
{
cout<<this->data[i][j]<<" ";
}
cout<<endl;
}
}
MATRIX yzs(MATRIX M1,int a,int b)
{
if(a<=M1.n&&b<=M1.m)
{
MATRIX M2(M1.n-1,M1.m-1);
for(int i=1;i<=M2.n;i++)
for(int j=1;j<=M2.m;j++)
{
if(i>=a)
{
if(j>=b)
{
M2.data[i][j]=M1.data[i+1][j+1];
}
else
{
M2.data[i][j]=M1.data[i+1][j];
}
}
else
{
if(j>=b)
{
M2.data[i][j]=M1.data[i][j+1];
}
else
{
M2.data[i][j]=M1.data[i][j];
}
}
}
return M2;
}
else
{
return MATRIX();
}
}
MATRIX inv(MATRIX M1)
{
if(M1.n!=M1.m)
{
return MATRIX();
}
MATRIX M2(M1.n,M1.m);
for(int i=1;i<=M2.n;i++)
for(int j=1;j<=M2.m;j++)
M2.data[i][j]=det(yzs(M1,i,j));
return (M2/det(M1));
}
double MATRIX::get(int i,int j)
{
return this->data[i][j];
}
double Vmax(MATRIX M1)
{
if(M1.m!=1)
return 0;
double max=M1.data[1][1];
for(int i=1;i<=M1.n;i++)
if(M1.data[i][1]>max)
max=M1.data[i][1];
return max;
}
double tzz(MATRIX M1)
{
if(M1.n!=M1.m)
return 0;
double t1,t2;
MATRIX m_nVector1(M1.n,1),m_nVector2(M1.n,1);
for(int i=1;i<=M1.n;i++)
m_nVector1.data[i][1]=M1.data[i][1];
m_nVector2=M1*m_nVector1;
t1=Vmax(m_nVector2);
m_nVector1=m_nVector2/t1;
for(i=0;i<100000;i++)
{
m_nVector2=M1*m_nVector1;
t2=Vmax(m_nVector2);
if(abs(t1-t2)<0.00005)
return t1;
m_nVector1=m_nVector2/t2;
t1=t2;
}
return 0;
}
double abs(double t1)
{
if(t1<0)
return (0-t1);
else
return t1;
}
MATRIX operator*(double a,MATRIX M1)
{
return M1*a;
}
void MATRIX::LU(MATRIX L,MATRIX U)
{
if(n!=m)
{
cout<<"error"<<endl;
return;
}
double **l,**u;
l=new (double*[n+1]);
u=new (double*[n+1]);
int i,j,k;
for(i=1;i<=n;i++)
{
l[i]=new (double[n+1]);
u[i]=new (double[n+1]);
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
l[i][j]=0;
u[i][j]=0;
}
for(i=1;i<=n;i++)
l[i][i]=1;
for(i=1;i<=n;i++)
u[1][i]=data[1][i];
for(i=2;i<=n;i++)
l[i][1]=data[i][1]/u[1][1];
double sum=0;
for(int r=2;r<=n;r++)
{
for(i=r;i<=n;i++)
{
sum=0;
for(k=1;k<=r-1;k++)
sum+=l[r][k]*u[k][i];
u[r][i]=data[r][i]-sum;
sum=0;
for(k=1;k<=r-1;k++)
sum+=l[i][k]*u[k][r];
l[i][r]=(data[i][r]-sum)/u[r][r];
}
}
MATRIX MT1(n,n),MT2(n,n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
MT1.put(l[i][j],i,j);
MT2.put(u[i][j],i,j);
}
L=MT1;
U=MT2;
return;
}
void MATRIX::put(double c,int a,int b)
{
this->data[a][b]=c;
return;
}
MATRIX::MATRIX(double** c,int a,int b)
{
this->n=a;
this->m=b;
data=new (double*[n+1]);
int i,j;
for(i=1;i<=n;i++)
data[i]=new (double[m+1]);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
}
aqfox 2004-04-18
  • 打赏
  • 举报
回复
MATRIX.H
#include "iostream.h"
class MATRIX
{
double **data;//矩阵数据
int n,m;//n行m列
public:
MATRIX();
~MATRIX();
void input();
void output();
MATRIX(MATRIX&);
MATRIX(int,int);
MATRIX operator+(const MATRIX&);
MATRIX operator-(const MATRIX&);
MATRIX operator*(const MATRIX&);
MATRIX operator*(double);
MATRIX operator/(double);
friend MATRIX operator*(double,MATRIX);
friend double det(MATRIX);//行列式值
friend MATRIX yzs(MATRIX,int,int);//代数余子式
friend MATRIX inv(MATRIX);//矩阵逆
double get(int,int);//取第i行第j列的值
friend double Vmax(MATRIX M1);//求向量最大分量
friend double tzz(MATRIX M1);//幂法求最大特征值
void put(double,int,int);//将一个值输入到第i行j列
void LU(MATRIX,MATRIX);//LU分解放入传入的两个矩阵中
MATRIX(double**,int,int);//将一个2维数组转化为矩阵
};
double abs(double);//绝对值
我也转的
theoldman 2004-04-17
  • 打赏
  • 举报
回复
上面我是转贴别人的。
theoldman 2004-04-17
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
using namespace std;

class Matrix
{
public:
Matrix(int);
Matrix(const Matrix&);
Matrix& operator=(const Matrix&);
int operator()(int,int) const;
int& operator()(int,int);
Matrix& operator +=(const Matrix&);
Matrix& operator -=(const Matrix&);
Matrix& operator *=(int);
Matrix& operator *=(const Matrix&);
Matrix GetQuarter(int) const ;//得到1/4个矩阵
Matrix& SetQuarter(const Matrix&,int);//设置1/4个矩阵
int Side() const;//矩阵的行/列
void Show() const;//打印矩阵
private:
void Malloc(int);//设置一个仿二维数组的大小
const int MN;//矩阵的行/列
vector< vector<int> > Data;//矩阵的数据
};

Matrix operator +(const Matrix&,const Matrix&);//全局函数:矩阵相加
Matrix operator -(const Matrix&,const Matrix&);//全局函数:矩阵相减
Matrix operator *(int,const Matrix&);//全局函数:整数乘以矩阵,在本程序中没用到
Matrix operator *(const Matrix&,int);//全局函数:矩阵乘以整数,在本程序中没用到
Matrix operator *(const Matrix&,const Matrix&);//全局函数:矩阵相乘

void Matrix::Malloc(int mn)//设定一个仿二维数组,大小为mn*mn;
{
Data.resize(mn);
for(int i=0;i<mn;++i)
Data[i].resize(mn);
}

Matrix::Matrix(int mn):MN(mn)
{
Malloc(MN);
}

Matrix::Matrix(const Matrix& rhs):MN(rhs.MN)//拷贝构造
{
Malloc(MN);
for(int i=0;i<MN;++i)
for(int j=0;j<MN;++j)
Data[i][j]=rhs.Data[i][j];
}

Matrix& Matrix::operator=(const Matrix& rhs)//矩阵赋值
{
if(MN!=rhs.MN) throw;
for(int i=0;i<MN;++i)
for(int j=0;j<MN;++j)
Data[i][j]=rhs.Data[i][j];
return *this;
}

int Matrix::operator()(int m,int n) const//得到矩阵的某个元素,坐标从0开始
{ return Data[m][n];
}

int& Matrix::operator()(int m,int n)//得到矩阵的某个元素,坐标从0开始,可以赋值
{ return Data[m][n];
}

Matrix& Matrix::operator +=(const Matrix& rhs)//类公开函数,A+=B;
{
if(MN!=rhs.MN) throw;
for(int i=0;i<MN;++i)
for(int j=0;j<MN;++j)
Data[i][j]+=rhs.Data[i][j];
return *this;
}

Matrix& Matrix::operator -=(const Matrix& rhs)//类公开函数,A-=B;
{
if(MN!=rhs.MN) throw;
for(int i=0;i<MN;++i)
for(int j=0;j<MN;++j)
Data[i][j]-=rhs.Data[i][j];
return *this;
}

Matrix& Matrix::operator *=(int Num)//类公开函数,A*=i;
{
for(int i=0;i<MN;++i)
for(int j=0;j<MN;++j)
Data[i][j]*=Num;
return *this;
}

Matrix Matrix::GetQuarter(int Pos) const//得到1/4个矩阵,Pos=0代表左上,Pos=1代表右上...
{
int X,Y;
switch(Pos%4)
{
case 0:X=Y=0;break;
case 1:X=0;Y=MN/2;break;
case 2:X=MN/2;Y=0;break;
case 3:X=Y=MN/2;
}
Matrix T(MN/2);
for(int i=0;i<T.MN;++i)
for(int j=0;j<T.MN;++j)
T.Data[i][j]=Data[i+X][j+Y];
return T;
}

Matrix& Matrix::SetQuarter(const Matrix& rhs,int Pos)//把rhs的值拷贝为自身的1/4个矩阵,Pos含义同上
{
int X,Y;
switch(Pos%4)
{
case 0:X=Y=0;break;
case 1:X=0;Y=MN/2;break;
case 2:X=MN/2;Y=0;break;
case 3:X=Y=MN/2;
}
for(int i=0;i<rhs.MN;++i)
for(int j=0;j<rhs.MN;++j)
Data[i+X][j+Y]=rhs.Data[i][j];
return *this;
}

int Matrix::Side() const//得到行/列
{
return MN;
}

Matrix& Matrix::operator *=(const Matrix& rhs)//类公开函数 A*=B;
{
*this= *this * rhs;//调用全局函数:矩阵相乘
return *this;
}

void Matrix::Show() const//打印矩阵
{ cout<<"Display Matrix:"<<endl;
for(int i=0;i<MN;++i){
for(int j=0;j<MN;++j)
cout<<Data[i][j]<<' ';
cout<<endl;
}
}

Matrix operator +(const Matrix& rhs1,const Matrix& rhs2)//全局函数:矩阵相加
{
Matrix T(rhs1);
return T+=rhs2;//调用类公开函数+=
}

Matrix operator -(const Matrix& rhs1,const Matrix& rhs2)//全局函数:矩阵相减
{
Matrix T(rhs1);
return T-=rhs2;//调用类公开函数-=
}

Matrix operator *(int Num,const Matrix& rhs)//全局函数:整数乘以矩阵
{
Matrix T(rhs);
return T*=Num;//调用类公开函数*=
}

Matrix operator *(const Matrix& rhs,int Num)//全局函数:矩阵乘以整数
{
Matrix T(rhs);
return T*=Num;//调用类公开函数*=
}

Matrix operator *(const Matrix& rhs1,const Matrix& rhs2)//全局函数,矩阵相乘
{ if(rhs1.Side()!=rhs2.Side()) throw;
if(rhs1.Side()==2){//行/列为2,按照常规方法计算
Matrix T(2);
T(0,0)=rhs1(0,0)*rhs2(0,0)+rhs1(0,1)*rhs2(1,0);//A11B11+A12B21;
T(0,1)=rhs1(0,0)*rhs2(0,1)+rhs1(0,1)*rhs2(1,1);//A11B12+A12B22
T(1,0)=rhs1(1,0)*rhs2(0,0)+rhs1(1,1)*rhs2(1,0);//A21B11+A22B21
T(1,1)=rhs1(1,0)*rhs2(0,1)+rhs1(1,1)*rhs2(1,1);//A21B12+A22B22
return T;
};
Matrix A11(rhs1.GetQuarter(0));//第一个矩阵的左上1/4矩阵
Matrix A12(rhs1.GetQuarter(1));//第一个矩阵的右上1/4矩阵
Matrix A21(rhs1.GetQuarter(2));//第一个矩阵的左下1/4矩阵
Matrix A22(rhs1.GetQuarter(3));//第一个矩阵的右下1/4矩阵
Matrix B11(rhs2.GetQuarter(0));//第二个矩阵的左上1/4矩阵
Matrix B12(rhs2.GetQuarter(1));//第二个矩阵的右上1/4矩阵
Matrix B21(rhs2.GetQuarter(2));//第二个矩阵的左下1/4矩阵
Matrix B22(rhs2.GetQuarter(3));//第二个矩阵的右下1/4矩阵
Matrix M1(A11*(B12-B22));//递归调用全局函数,矩阵相乘
Matrix M2((A11+A12)*B22);//递归调用全局函数,矩阵相乘
Matrix M3((A21+A22)*B11);//递归调用全局函数,矩阵相乘
Matrix M4(A22*(B21-B11));//递归调用全局函数,矩阵相乘
Matrix M5((A11+A22)*(B11+B22));//递归调用全局函数,矩阵相乘
Matrix M6((A12-A22)*(B21+B22));//递归调用全局函数,矩阵相乘
Matrix M7((A11-A21)*(B11+B12));//递归调用全局函数,矩阵相乘
Matrix C11(M5+M4-M2+M6);//调用全局函数,矩阵相加/减
Matrix C12(M1+M2);//调用全局函数,矩阵相加
Matrix C21(M3+M4);//调用全局函数,矩阵相加
Matrix C22(M5+M1-M3-M7);//调用全局函数,矩阵相加/减

Matrix T(rhs1.Side());//返回的矩阵
//设置C11-C22为T的四个小矩阵
T.SetQuarter(C11,0).SetQuarter(C12,1).SetQuarter(C21,2).SetQuarter(C22,3);
return T;
}

bool Is2Pow(int i)//判断i是否是2的n次方
{ if(i<2) return false;
while(i>2){
if(i%2) return false;
i/=2;
}
return i==2 ? true:false;
}
int main()
{ int M;
cout<<"Input two matrixes[M*M],and culculate multiply with Strassen!"<<endl;
cout<<"M=";
cin>>M;
if(Is2Pow(M)==false){
cout<<"Error:M should equal 2^n";
return 1;
}
cout<<"Input Matrix A["<<M<<"*"<<M<<"]:"<<endl;
Matrix A(M);
for(int i=0;i<M;++i)
for(int j=0;j<M;++j)
cin>>A(i,j);
cout<<"Input Matrix B["<<M<<"*"<<M<<"]:"<<endl;
Matrix B(M);
for(int i=0;i<M;++i)
for(int j=0;j<M;++j)
cin>>B(i,j);
Matrix AB(A*B);
cout<<"A*B"<<endl;
AB.Show();
Matrix BA(B*A);
cout<<"B*A"<<endl;
BA.Show();
return 0;
}

itmaster 2004-04-17
  • 打赏
  • 举报
回复
http://peppermint.jp/products/death/doc/d3dmath_8h.html
FengYuanMSFT 2004-04-17
  • 打赏
  • 举报
回复
d3dxmath.h, it's part of D3D SDK or platform SDK.

It's for D3D game programming, but you can also use it for other purposes.
bugzhao 2004-04-17
  • 打赏
  • 举报
回复
what is d3dmath.h?
FengYuanMSFT 2004-04-16
  • 打赏
  • 举报
回复
Check D3DXMATRIX class in d3dmath.h
新手编程导论 ———— A Programming Introduction For Beginners By Minlearn @ http://www.actyou.com.cn/ 设计才是真正的编程! 对类型的设计才是设计! 面向对象并非一切? 无论你以为上述观点是惊天大秘或不过尔尔,你都需要这本书! -------------------------------------------------------------------------------------------------------------- Todo: 整合过长的目录 完善前二十页 -------------------------------------------------------------------------------------------------------------- 目 录 第一部分 9 前 言 9 By Chenyi 9 By Minlearn 10 导 读 14 任何语言都是有门槛的 14 什么是语言级和语言外要学习的(数据结构与代码结构) 15 什么是语言级要学习的 17 编程学习方法 18 计算机学生专业课程本质讲解 18 用C++开发要学到什么程度 20 本书目录安排 21 第二部分 基础:导论 25 第1章 系统 25 1.1 何谓PC 25 1.2 图灵机与冯氏架构 26 1.3计算机能干什么 27 1.4 内存地址 28 1.5 分段和分页以及保护模式 30 1.7 操作系统 31 1.6 并发与协程 33 1.6 CPU与异常 33 1.7 所谓堆栈 34 1.8 真正的保护模式 36 1.9 异常与流转 38 1.10 最小,最完美的系统 39 1.11 操作系统与语言的关系 41 1.12 虚拟机与语言 41 1.13 虚拟机与语言 42 1.14 调试器与汇编器 43 1.15 平台之GUI 45 1.16 界面的本质应该是命令行功能支持下的配置描述文件 45 1.17 命令行下编程实践 46 第2章 语言 47 2.1 真正的计算模型 47 2.2 开发模型与语言模型 49 2.3 正规表达式与有限自动机 53 2.4 联系编译原理学语言 56 2.6 如何理解运行时 59 2.7 运行时环境 60 2.7 运行时 60 6.3 语言的类型系统 60 2.8 编译与解释 62 2.9 运行期与编译期 62 2.9 编译与运行期分开的本质与抽象 63 2.10 脚本语言 63 2.11 灵活性与安全性 65 2.12 二进制指令与循环 66 2.13 所谓函数 67 2.14 所谓流程 68 2.15 为什么需要数据类型和数据结构 68 2.16 数据类型和数据结构是二种不一样的东西 69 2.17 为什么需要变量这些东东 69 2.18 面向类型化的设计和面向无类型泛化的设计-OO不是银弹 70 第3章 语言之争 71 3.1 学编程之初,语言之争 71 3.2 语言与应用与人(1) 72 3.2 语言与应用与人(2) 73 3.3 C与Ruby 74 3.4 你为什么需要Ruby 75 3.5 C++还是Ruby 76 3.6 C++与Java 76 3.7 .NET与JVM 77 3.8 你为什么需要Ruby 78 3.9 语言功能上的差别 79 3.10 C与C++之争 80 3.11 我为什么选择C而不是C++及其它语言 81 3.12 类VB,DELPHI类RAD语言分析 82 第4章 语言最小内核(C) 83 4.1 C与C++是二种不同的语言 83 4.2 C的数组,指针与字符串 84 4.3 C的输入与输出流 84 4.4 C的类型系统与表达式 85 4.5 二进制指令看循环 85 4.6 所谓指针:当指针用于设计居多时 86 4.7 指针成就的C语言 86 4.8 指针是语言的一种抽象机制 88 4.9 学C千万不能走入的一个误区(其实JAVA比C难) 88 4.10 C抽象惯用法 90 4.11 C的抽象范式之OOP 91 4.12 C的观点:底层不需要直接抽象 93 4.13 指针:间接操作者 94 4.14 真正的typedef 95 4.15 真正的指针类型 95 4.16 真正的函数指针 97 4.17 真正的句柄 97 4.18 真正的循环 98 4.19 真正的static 98 4.20 真正的数组索引 99 4.21 类型和屏看原理 100 4.22 位操作与多维数组指针与元素 101 4.23 变量与VOID 102 第5章 抽象 102 5.1 人与软件 103 5.2 软件活动的特点 103 5.2 抽象与接口 104 5.3 过度抽象 105 5.3 OO为什么不是银弹 - 过度抽象与抽象偏差 106 5.4 真正的设计与编码 107 5.5 真正的构件库 109 5.6 大逻辑与小逻辑 112 5.7 什么是范式 112 第6章 抽象之数据结构 113 6.1 所谓数据结构 113 6.2 算法+数据结构的本质 115 6.4 算法不是设计 115 6.5 函数增长与算法复杂性分析 115 6.6 数据结构初步引象(1) 116 6.7 数据结构初步引象(2) 117 6.8 数据结构初步引象(3) 118 6.9 数据结构初步引象(4) 119 6.10 ordered与sorted 119 6.11 数据结构与抽象 119 6.12 真正的逻辑数据结构只有二种 120 6.12 树与图初步引象 121 6.13 树初步引象 122 6.14 B减树 123 6.15 图初步引象 124 6.16 树的平衡与旋转 125 6.17 完全与满 129 6.18 多路234树与红黑树的导出 129 6.19 快速排序思想 130 6.20 数据结构之数组 131 6.21 数据结构的抽象名字 132 6.22 真正的ADT 133 6.23 Vector的观点 135 6.24 真正的数据结构 136 6.25 堆栈与队列 138 6.26 真正的递归 140 6.27 树与单链表,图 145 6.28 树 146 6.29 真正的散列表 148 6.30 算法设计方法 148 第7章 抽象之高级语法机制 149 7.1 真正的OO解 149 7.2真正的对象 151 7.3真正的继承 152 7.4真正的OO 152 7.5真正的OOP 154 7.6 真正的构造函数 155 7.7 真正的私有,保护和公有 156 7.8 真正的重载与复写 156 7.9 C++的元编程 156 7.10 模板的意义在于编译前端的设计 157 7.11 C++的元编程和泛型编程 159 7.12 元编程和函数式编程 159 7.13 C++的模板编译技术本质 161 7.14 OO的缺点 161 7.15 模板的继承 162 7.16 模板的偏特化 162 7.17 真正的策略 162 7.18 为设计产生代码 164 7.19 真正的metaprogramming 165 7.20 元编程技术 166 第8章 抽象之设计和领域逻辑 167 8.1 大设计 167 8.1 什么是设计 167 8.2 编程能力,代码控制能力,复用与接口,轮子发明与使用 170 8.3 OO,模板,设计模式与设计 171 8.4 设计能力和程序员能力模型 172 8.4 自上而下设计和自下而上设计 173 8.5 大中型软件和复用与逻辑达成 177 8.6 通用设计与专门设计 178 8.7 具象与抽象 178 8.7 架构与应用 179 8.8 应用与设计 179 8.9 与软件有关的哲学 联系 180 8.10 与软工有关的哲学 唯物主义 180 8.11 真正的设计模式 182 8.12 设计模式与数据结构 182 8.12 设计模式之基础 183 8.12 真正的开闭原则 183 8.13 真正的通米特原则 184 8.14 真正的好莱钨原则 185 8.15 真正的策略模式 185 8.16 真正的观察者模式 185 8.17 真正的装饰模式 186 8.18 真正的单例模式 186 8.19 真正的迭代器模式 186 8.20 真正的工厂模式 187 8.21 真正的门面模式 187 8.22 真正的命令模式 188 8.23 真正的模板方法模式 188 8.24 真正的适配器模式 188 8.25 业务与逻辑分开 189 8.26 架构不是功能的要求,但却是工程的要求 189 8.27 你需不需要一个库 190 8.28 可复用与可移殖的区别 190 8.28 再谈可复用 193 8.29 真正的可复用 193 8.30 你能理解XP编程吗 194 8.31 构件与接口,软工 195 8.32 设计方法论 196 8.33 真正的interface 198 8.34 真正的对接口进行编程 200 8.35 实践方法之极限编程 200 8.36 设计模式复用与框架复用 201 第三部分 进阶: C,C++代码阅读与控制 201 第9章 语法与初级标准库 202 9.1 C++的基于过程设计 203 9.2 C++的基于对象设计: 模板与设计 203 9.3 面向对象设计 204 9.4 泛型开发与初级StdC库 204 第10章 数据逻辑与STL库 204 10.1 仿函数 204 10.2 iterater 204 10.3 adapter 205 第11章 高级代码逻辑与LOKI库 205 11.1 typelist 205 11.2 traits 206 11.2 policy 206 第四部分 一个例子:游戏引擎和实现 206 第12章 设计(需求分析) 207 12.1 第一天:接到一个案子 207 12.2 第二天:需求分析 208 第13章 设计(领域分析与抽象) 210 13.1 原语设计 210 13.2 了解Yake 216 13.3 GVWL1.0开发 222 13.4 范型设计与实作 223 第14章 编码 224 14.1 原语设计 224 14.2 实现《梦想与财富》 224 第15章 重构 225 15.1 增加Jxta 225 第五部分 225 选读 225 字符与字符串 226 为什么我说Java是脚本语言 226 宽松语法,无语法语言 227 Linux与3D 228 伪码语言 229 最强大的语言原来是预处理 230 语言宿主 231 shell编程和交互式语句编程 232 Debug,编译期断言 232 图形原理之位图,图象和字体 233 为Windows说些好话 233 Minlearn Ruby (5) 网络原理与P2P 234 Minlearn Ruby(4) 字符串与WEB 234 加密与解密 235 Minlearn(3)载体逻辑 236 Minlearn(2) 平台与并发 237 Minlearn(1)平台之持久 237 平台之多媒体编程 237 Minlearn Ruby 238 思想,维度,细节 240 理想 241 XML 242 面向更好复用的封装机制 243 SOA 244 浮点标准与实现 244 Desktop,web,internet,云计算不过WEB的集中化这种说法的偷换概念 246 编程设计与经济 246 晕计算 247 在形式主义与直觉主义之间:数学与后现代思想的根源 248 Scheme 程序语言介绍之一 248 与软工有关的哲学 辩证 251 富网页技术 251 形式维度 252 开源与开放 253 Core learning and min learing编程 253 与软工有关的哲学 联系 254 本地化和语言编码 254 学习与维度 255 跟软件有关的哲学.唯物主义 255 关于逻辑的逻辑 256 合理性 257 语言,道理和感情 258 可恶OO 259 互联网与企业开发 259 会学习的人首先要学历史 260 离散数学与代数系统 262 线代与矩阵 262 计算机与编程 263 真正的二进制 265 真正的文件 266 真正的数据 267 真正的Unicode 267 真正的Windows消息 269 真正的XML 270 真正的GUI 271 设备环境 271 真正的MFC 273 真正的虚拟机 275 真正的.NET 276 真正的脚本 278 真正的并发性 279 真正的反工程 280 真正的DSL 282 真正的多范型设计 284 真正的调试 285 真正的浮点数 286 真正的布尔 288 真正的整型数 289 真正的引用 290 真正的RTTI 290 真正的句柄 292 真正的循环 293 真正的STL 293 真正的容器 295 真正的智能指针 295 真正的数组索引 296 数据库 297 真正的可持久化 298 真正的类库 299 真正的COM 300 真正的DCOM 301 真正的Sun策略 302 真正的J2EE 303 真正的EJB 304 附录:一些领域逻辑,通用OO设计策略,框架设计 305 附录:参考文献 305 附录:一些建议 305

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧