实验3 类和对象Ⅱ

task4代码:

vector_int.hpp:

#pragma once
#include<iostream>
using namespace std;
class vector_int{
public:
    vector_int(int n) {
        p = new int[n]();
        cout<<"数组已创建,长度为:" << n << endl;
    }
    vector_int(int n, int x) {
        p = new int[n];
        for (int* q = p; q != p + n; ++q)
            *q = x;
        cout << "数组已创建,长度为:"<< n <<"元素初始化为"<< x << endl;
    };
    int at(int n) {
        int* q = p;
        return *(q+n);
    }
    ~vector_int() {
        delete[]p;
        cout << "内存已释放" << endl;
    }
private:
    int* p;
};

main.cpp:

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

int main()
{
    vector_int x(6);
    vector_int y(7,6);
    cout << y.at(2) << endl;

    return 0;
}

 

task5代码:

#ifndef MATRIX_H
#define MATRIX_H

#include <iostream>
#include <cassert>
using namespace std;
class Matrix
{
public:
    Matrix(int n);                                                   // 构造函数,构造一个n*n的矩阵
    Matrix(int n, int m);                                                    // 构造函数,构造一个n*m的矩阵
    Matrix(const Matrix& X);            // 复制构造函数,使用已有的矩阵X构造
    ~Matrix() {
        delete[]p;
        cout << "free" << endl;
    }                         //析构函数
    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 {
        return lines;
    }                                   //返回矩阵行数
    int get_cols() const {
        return cols;
    }                                   //返回矩列数
    void print() const;                // 按行打印输出矩阵
private:
    int lines; // 矩阵行数
    int cols;  // 矩阵列数
    double *p; // 指向存放矩阵数据的内存块的首地址
};


Matrix::Matrix(int n)
{
    lines = n; cols = n;
    p = new double[n * n];
}
inline Matrix::Matrix(int n, int m)
{
     lines = n, cols = m;
     p = new double[n * m];
}
inline Matrix::Matrix(const Matrix& X)
{
    lines = X.lines; cols = X.cols;
    p = X.p;
}
 inline void Matrix::set(const double* pvalue)
 {
     p =const_cast<double*> (pvalue);
 }
 void Matrix::set(int i, int j, int value) 
{
   p[lines*i+j] = value;
}
 inline double& Matrix::at(int i, int j)
 {
     return p[lines * i + j];
 }
double Matrix::at(int i, int j) const
{
    return p[lines * i + j];
}
inline void Matrix::print() const
{
    int i;
    for (i = 0; i < lines * cols; i++)
    {
        cout << p[i];
        if (i % cols == 0)
            cout << endl;
    }
}
#endif

运行截图:

task4:

 

task5

 

posted @ 2021-11-08 19:12  不要说我笨  阅读(18)  评论(1)    收藏  举报