⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8.cpp

📁 一、教学目的: 能理解C++中运算符重载的需要性
💻 CPP
字号:
#include<iostream.h>          
#include<stdlib.h>
class Matrix;
class Vector
{
public:
	Vector(int);
	~Vector(){delete[]v;}//将堆中空间返还
	Vector(Vector&);
	//int Size(){return sz;}不需要
	void Display();
	int& Elem(int);//返回向量元素
	friend Vector Multiply(Matrix& m,Vector& v);
protected:
	int* v;//指向一个数组
	int sz;//元素个数
};
Vector::Vector(int s)
{
	if(s<=0)
	{
		cerr<<"bad Vector size.\n";
		exit(1);
	}
	sz=s;
	v=new int[s];//从堆中分配一个数组存放向量元素
}
int& Vector::Elem(int i)//引用返回的目的是返回值可以作左值
{
	if(i<0||sz<=i)
	{
		cerr<<"Vector index out of range.\n";
		exit(1);
	}
	return v[i];
}
Vector::Vector(Vector& vec)
{
	v=new int[sz=vec.sz];
	for(int i=0;i<sz;i++)
		*(v+i)=*(vec.v+i);
}
void Vector::Display()
{
	for(int i=0;i<sz;i++)
		cout<<v[i]<<" ";
	cout<<endl;
}
class Matrix
{
public:
	Matrix(int,int);
	~Matrix(){delete []m;}
	//int SizeL(){return szl;}不需要
	//int SizeR(){return szr;}不需要
	int& Elem(int,int);
    friend Vector Multiply(Matrix& m,Vector& v);
protected:
	int *m;
	int szl;
	int szr;
};
Matrix::Matrix(int i,int j)
{
	if(i<=0||j<=0)
	{
		cerr<<"bad Matrix size.\n";
        exit(1);
	}
	szl=i;
	szr=j;
	m=new int[i*j];
}

int& Matrix::Elem(int i,int j)//引用返回的目的是返回值可以作左值
{
	if(i<0||szl<=i||j<0||szr<=j)
	{
		cerr<<"Matrix index out of range.\n";
		exit(1);
	}
	return m[i*szr+j];
}
Vector Multiply(Matrix& m, Vector& v)//友元定义
{
	if(m.szr!=v.sz)
	{
		cerr<<"bad multiplying Matrix with vector.\n";
		exit(1);
	}
	Vector r(m.szl);//创建一个存放结果的空向量
	for(int i=0;i<m.szl;i++)
	{
		r.v[i]=0;
		for(int j=0;j<m.szr;j++)
			r.v[i]+=m.m[i*m.szr+j]*v.v[j];
	}
	return r;
}

void main()
{
	Matrix ma(4,3);
	ma.Elem(0,0)=1;ma.Elem(0,1)=2;ma.Elem(0,2)=3;
	ma.Elem(1,0)=0;ma.Elem(1,1)=1;ma.Elem(1,2)=2;
	ma.Elem(2,0)=1;ma.Elem(2,1)=1;ma.Elem(2,2)=3;
	ma.Elem(3,0)=1;ma.Elem(3,1)=2;ma.Elem(3,2)=1;

	Vector ve(3);
	ve.Elem(0)=2;ve.Elem(1)=1;ve.Elem(2)=0;

	Vector va=Multiply(ma,ve);
	va.Display();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -