一、问题描述:
线性代数里面我们学习过n维向量,请用类vector_N来封装n维整型向量,成员如下;
私有数据成员: 向量维数n, int型指针 p,int型
公有函数成员:无参默认构造函数,在该函数中,将n置0,将p置null;重载输入输出运算符,输入运算符,先指定向量维数,若输入为非正整数,则提示错误信息,“Error Length!”然后退出程序,若维数输入正确则分配长度为n的动态内存,并用指针p指向该内存,输出运算符依次输出向量各元素即可;重载向量的加法+、减法-、数乘*(乘数在前,乘数为int型)这三运算符;重载[]运算,例如,向量a=(1,2,3,4),a[0]的值为1,若下标越界,则输出“Error Index”,然后退出程序;返回向量维数的函数;将两个向量的内积运算定义为vector_N的友元函数;在主函数中定义两个vector_N类对象v1,v2,均不带参数,之后对两个对象进行输入赋值,输入数乘运算的乘数,输入待取元素的下标,对两个向量进行加、减、数乘和内积运算,并将结果输出,输出v1中对应下标对应的元素。加法、减法和内积运算先判断两向量维数是否一致,若一致则输出运算结果,否则输出错误提示信息“Mismatch Length!”
二、解题思路:
1、先定义类,定义出成员数据。在定义出所需的成员函数。2、根据成员函数的作用去编写成员函数的作用。3、根据题目问题描述以及输入输出的数据及方式进行主函数的编写。4、调试运行。
三、代码实现:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 class vector_N 5 { 6 private: 7 int n; 8 int *p; 9 public: 10 vector_N():n(0),p(NULL){} 11 friend istream & operator>>(istream &put,vector_N &v); 12 friend ostream & operator<<(ostream &out,vector_N &v); 13 vector_N operator+(vector_N &v); 14 vector_N operator-(vector_N &v); 15 friend vector_N operator*(int s,vector_N &v); 16 int operator[](int a); 17 friend int neiji(vector_N a,vector_N b); 18 int ren(vector_N v) 19 { 20 return v.n; 21 } 22 }; 23 istream & operator>>(istream &put,vector_N &v) 24 { 25 put>>v.n; 26 if(v.n<=0) 27 { 28 cout<<"Error Length!"; 29 } 30 else 31 { 32 v.p=new int[v.n]; 33 for(int i=0;i<v.n;i++) 34 { 35 put>>v.p[i]; 36 } 37 } 38 return put; 39 } 40 ostream & operator<<(ostream &out,vector_N &v) 41 { 42 out<<"("; 43 for(int i=0;i<v.n;i++) 44 { 45 out<<v.p[i]<<", "; 46 } 47 out<<")"; 48 return out; 49 } 50 vector_N vector_N::operator+(vector_N &v) 51 { 52 vector_N b; 53 b.n=v.n; 54 b.p=new int[v.n]; 55 for(int i=0;i<v.n;i++) 56 { 57 b.p[i]=p[i]+v.p[i]; 58 } 59 return b; 60 } 61 vector_N vector_N::operator-(vector_N &v) 62 { 63 vector_N b; 64 b.n=v.n; 65 b.p=new int[v.n]; 66 for(int i=0;i<v.n;i++) 67 { 68 b.p[i]=p[i]-v.p[i]; 69 } 70 return b; 71 } 72 vector_N operator*(int s,vector_N &v) 73 { 74 vector_N b; 75 b.n=v.n; 76 b.p=new int[v.n]; 77 for(int i=0;i<v.n;i++) 78 { 79 b.p[i]=s*v.p[i]; 80 } 81 return b; 82 } 83 int vector_N::operator[](int a) 84 { 85 return p[a]; 86 } 87 int neiji(vector_N a,vector_N b) 88 { 89 int sum=0; 90 for(int i=0;i<a.n;i++) 91 { 92 sum+=a.p[i]*b.p[i]; 93 } 94 return sum; 95 } 96 int main() 97 { 98 vector_N v1,v2,v3; 99 int a,b; 100 cin>>v1>>v2; 101 cin>>a>>b; 102 if(v1.ren(v1)!=v2.ren(v2)) 103 { 104 cout<<"Mismatch Length!"<<endl; 105 } 106 else 107 { 108 cout<<v1+v2<<endl<<v1-v2<<endl<<neiji(v1,v2)<<endl; 109 } 110 cout<<a*v1<<endl; 111 if(b>(v1.ren(v1)-1)||b<0) 112 { 113 cout<<"Error Index"<<endl; 114 _exit(0); 115 } 116 else 117 { 118 cout<<v1[b]<<endl; 119 } 120 return 0; 121 }
四、总结:
1、输入输出运算符的重载格式:
(1)输入:friend iostream & operator>>(iostream & input,类名 &)(2)输出:friend ostream & operator<<(ostream &output,类名 &)
2、运算符重载需定义为友元函数的情况:
(1)运算符为双目运算符;(2)输入输出运算符;(3)左边的类型不是类(4)具有交换性的运算符
标签:函数,16,运算符,v1,vector,2023.4,operator,打卡,向量 From: https://www.cnblogs.com/lixinyao20223933/p/17324176.html