ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

实验三 类与对象II

2021-11-06 10:33:49  阅读:98  来源: 互联网

标签:const Matrix 对象 lines cols II int Vector 实验


task4: 模拟实验任务2,不使用标准库模板类vector,自己动手设计并实现一个动态的整型数组类Vector_int

vector_int.hpp

 1 #ifndef VECTOR_INT_HPP
 2 #define VECTOR_INT_HPP
 3 #include<iostream>
 4 #include<cassert>
 5 using namespace std;
 6 class Vector_int
 7 {
 8 private:
 9     int *p;
10     int size;
11 public:
12     Vector_int(int n,int a);
13     Vector_int(const Vector_int &a);
14     int &at(int index);
15     ~Vector_int();
16     friend void print(const Vector_int a);
17 };
18 
19 Vector_int::Vector_int(int n,int a=0):size(n)
20 {
21     p=new int[size](); 
22     for (int i = 0; i < size; i++)
23         *(p+i)=a;
24     cout<<"Constructor called."<<endl;    
25 }
26 Vector_int::Vector_int(const Vector_int &a):size(a.size)
27 {
28     p=new int[size]();
29     for (int i = 0; i < size; i++)
30         *(p+i)=*(a.p+i);
31     cout<<"Copy Constructor called."<<endl;
32 }
33 Vector_int::~Vector_int()
34 { 
35     delete []p;
36     cout<<"Destructor called."<<endl; 
37 }
38 int &Vector_int::at(int index)
39 {
40     assert(index>=0&&index<size);
41     return p[index];
42 }
43 #endif

task4.cpp

 1 #include<iostream>
 2 #include"vector_int.hpp"
 3 void print(const Vector_int a)
 4 {
 5     for (int i = 0; i < a.size; i++)
 6         cout<<a.p[i]<<ends;
 7     cout<<endl;
 8 }
 9 
10 int main()
11 {
12     int n;
13     cout<<"请输入数组大小:"; 
14     cin>>n;
15     Vector_int x(n); // 创建一个动态大小的int型数组对象x,向系统申请n个int型数据项空间
16     Vector_int y(n, 5); // 创建一个动态大小的int型数组对象x,向系统申请n个int型数据项空间, 初始值均为6
17     Vector_int z(x); // 用已经存在的对象x构造新的对象y
18     z.at(0) = 999; // 通过at()方法访问对象y中索引为0的数据项
19     print(x);
20     print(y);
21     print(z);
22 }

 

 task5:实现一个动态矩阵类Matrix

Matrix.cpp

 1 #ifndef MATRIX_HPP
 2 #define MATRIX_HPP
 3 #include <iostream>
 4 #include <cassert>
 5 class Matrix
 6 {
 7 public:
 8     Matrix(int n);                     
 9     Matrix(int n, int m);              
10     Matrix(const Matrix &X);           
11     ~Matrix();  
12                            
13     void set(const double *pvalue);     
14     void set(int i, int j, int value); 
15     double &at(int i, int j);          
16     double at(int i, int j) const;     
17     int get_lines() const;             
18     int get_cols() const;              
19     void print() const;     
20                
21 private:
22     int lines;
23     int cols;  
24     double *p; 
25 };
26 
27 Matrix::Matrix(int n):lines(n),cols(n)
28 {
29     p=new double[lines*cols];
30 }
31 
32 Matrix::Matrix(int n,int m):lines(n),cols(m)
33 {
34     p=new double[lines*cols];
35 }
36 
37 Matrix::Matrix(const Matrix &X):lines(X.lines),cols(X.cols)
38 {
39    p=new double[lines*cols];
40     for (int i = 0; i < lines*cols; i++)
41            p[i]=X.p[i];   
42 }
43 
44 Matrix::~Matrix()
45 {
46     std::cout<<"Destructor called"<<std::endl;
47     delete []p;
48 }
49 
50 void Matrix::set(const double *pvalue)
51 {
52     for (int i = 0; i < lines*cols; i++)
53         p[i]=pvalue[i]; 
54 }
55 void Matrix::set(int i,int j,int value)
56 {
57     p[i*cols+j]=value;
58 }
59 
60 double &Matrix::at(int i,int j)
61 {
62     assert(i>=0&&i<lines&&j>=0&&j<cols);
63     return p[i*cols+j];
64 }
65 
66 double Matrix::at(int i,int j)const
67 {
68     assert(i>=0&&i<lines&&j>=0&&j<cols);
69     return p[i*cols+j];
70 }
71 
72 int Matrix::get_lines()const
73 {
74     return lines;
75 }
76 
77 int Matrix::get_cols()const
78 {
79     return cols;
80 }
81 
82 void Matrix::print()const
83 {
84     for (int i = 0; i < lines; i++)
85         {
86             for (int j = 0; j < cols; j++)
87             std::cout<<p[i*cols+j]<<" ";
88         std::cout<<std::endl; 
89         } 
90 }
91 #endif

task5.cpp

 1 #include<iostream>
 2 #include"Matrix.hpp"
 3 int main(){
 4     using namespace std;
 5 
 6     double x[] = {3, 6, 3, 4, 5, 6};
 7 
 8     Matrix m1(3, 2);    // 创建一个3×2的矩阵
 9     m1.set(x);          // 用一维数组x的值按行为矩阵m1赋值
10     m1.print();         // 打印矩阵m1的值
11     cout << "the first line is: " << endl;
12     cout << m1.at(0, 0) << " " << m1.at(0, 1) << endl;
13     cout << endl;
14 
15     Matrix m2(2, 3);
16     m2.set(x);
17     m2.print();
18     cout << "the first line is: " << endl;
19     cout << m2.at(0, 0) << " " << m2.at(0, 1) << " " << m2.at(0, 2) << endl;
20     cout << endl;
21 
22     Matrix m3(m2);
23     m3.set(1, 1, 888);
24     m3.print();
25     return 0;
26 }

 

 总结:

1.学到了动态创建数组的方法,即new和delete的使用

2.学习到了标准c++头文件cassert中assert的使用

 

标签:const,Matrix,对象,lines,cols,II,int,Vector,实验
来源: https://www.cnblogs.com/hh22/p/15516089.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有