实验三 类和对象2

vector_int.hpp

#include<iostream>

using namespace std;

 class vector_int
{
     public:
             vector_int(int n, int number = 0);
             vector_int(vector_int & v);
            ~vector_int()
                {
                     cout << "deleting..." << endl;
                     delete[]p;
                }
             int& at(int index);
    private:
             int size;
             int* p;
     };


 vector_int::vector_int(int n, int number)
 {
         cout << "Calling the constructor" << endl;
         size = n;
        p = new int[size];
         for (int i = 0; i < size; i++)
                p[i] = number;
     }

 vector_int::vector_int(vector_int & v)
 {
         cout << "Calling the copy constructor" << endl;
         p = new int[v.size];
        size = v.size;
         for (int i = 0; i < v.size; i++)
                 p[i] = v.p[i];
     }

 int& vector_int::at(int index)
{
         if ((index >= 0) && (index < size))
                 return p[index];
     }

task4.cpp

 #include < iostream>
 #include"vector_int.hpp"

 using namespace std;

 int main()
 {
         int n = 6, i;
         vector_int x(n, 6);
         // 输出X的值
             cout << endl;
         cout << "x的值为:" << endl;
         for (i = 0; i < n - 1; i++)
                 cout << x.at(i) << " ";
         cout << x.at(i) << endl;
         cout << endl;
    
             // 调用复制构造函数 
             vector_int y(x);
    
             y.at(0) = 999;
         cout << endl;
        cout << "y的值为:" << endl;
         for (i = 0; i < n - 1; i++)
                 cout << y.at(i) << " ";
         cout << y.at(i) << endl;
         cout << endl;
         return 0;
     }

运行结果

 Matrix.hpp

 #ifndef MATRIX_H
 #define MATRIX_H

 #include <iostream>
 #include <cassert>

 class Matrix
 {
 public:
         Matrix(int n);                     // 构造函数,构造一个n*n的矩阵 
         Matrix(int n, int m);              // 构造函数,构造一个n*m的矩阵
         Matrix(const Matrix & X);           // 复制构造函数,使用已有的矩阵X构造
         ~Matrix();                         //析构函数
         void set(const double* pvalue);     // 用pvalue指向的连续内存块数据为矩阵赋值
         void set(int i, int j, int value); //设置矩阵第i行第j列元素值为value
         double& at(int i, int j);          //返回矩阵第i行第j列元素的引用
         double at(int i, int j) const;     // 返回矩阵第i行第j列元素的值
         int get_lines() const;             //返回矩阵行数
         int get_cols() const;              //返回矩列数
         void print() const;                // 按行打印输出矩阵
 private:
         int lines; // 矩阵行数
         int cols;  // 矩阵列数
         double* p; // 指向存放矩阵数据的内存块的首地址
     };


Matrix::Matrix(int n)
 {
         p = new double[n * n];
         lines = n, cols = n;
     }

 Matrix::Matrix(int n, int m)
 {
         p = new double[n * m];
         lines = n, cols = m;
     }

 Matrix::Matrix(const Matrix & X)
{
         lines = X.lines;
        cols = X.cols;
         p = new double[lines * cols];
         for (auto i = 0; i < lines * cols; i++)
                 p[i] = X.p[i];
     }

 Matrix::~Matrix()
 {
         delete[]p;
     }

 void Matrix::set(const double* pvalue)
 {
         for (int i = 0; i < lines * cols; i++)
                 p[i] = pvalue[i];
     }

void Matrix::set(int i, int j, int value)
 {
        p[i * cols + j] = value;
     }

 double& Matrix::at(int i, int j)
 {
         return p[i * cols + j];
     }

 double Matrix::at(int i, int j) const
 {
         return p[i * cols + j];
     }

 int Matrix::get_lines() const
 {
         return lines;
     }

 int Matrix::get_cols() const
 {
         return cols;
     }

 void Matrix::print() const
 {
         int i, j;
         for (i = 0; i < lines; i++)
            {
                 for (j = 0; j < cols - 1; j++)
                         std::cout << p[i * cols + j] << " ";
                std::cout << p[i * cols + j] << std::endl;
             }
     }
 #endif

task5.cpp

#include "Matrix.hpp"
#include<iostream>
using namespace std
int main()
{
        using namespace std;
    
             double x[] = { 1, 2, 3, 4, 5, 6 };
    
             Matrix m1(3, 2);    // 创建一个3×2的矩阵
         m1.set(x);          // 用一维数组x的值按行为矩阵m1赋值
         m1.print();         // 打印矩阵m1的值
         cout << "the first line is: " << endl;
         cout << m1.at(0, 0) << " " << m1.at(0, 1) << endl;
         cout << endl;
    
             Matrix m2(2, 3);
         m2.set(x);
         m2.print();
         cout << "the first line is: " << endl;
         cout << m2.at(0, 0) << " " << m2.at(0, 1) << " " << m2.at(0, 2) << endl;
         cout << endl;
    
             Matrix m3(m2);
         m3.set(0, 0, 999);
         m3.print();
     }

 

posted @ 2021-11-09 20:12  吔瓜群众  阅读(11)  评论(3编辑  收藏  举报