实验四

实验任务5

.cpp

void test()
{
    using namespace std;

    int n;
    cin >> n;

    vectorInt x1(n);
    for (auto i = 0; i < n; i++)
        x1.at(i) = i * i;
    output(x1);
    vectorInt x2(n, 42);
    vectorInt x3(x2);
    output(x2);
    output(x3);
    x2.at(0) = 77;
    output(x2);
    output(x3);
}
int main()
{
    test();
}

.hpp

#pragma once
#include<cassert>
#include<iostream>
using namespace std;

class vectorInt
{
public:
    vectorInt(int n);
    vectorInt(int n, int value);
    vectorInt(const vectorInt& v);
    ~vectorInt();
    int& at(int index) const;
    int get_size() const;
    friend void output(const vectorInt& v);

private:
    int* q;
    int size;
};

vectorInt::vectorInt(int n) :size{ n }
{
    q = new int[size];
    cout << "constructor 1 called." << endl;
}
vectorInt::vectorInt(int n, int value) : size{ n }
{
    q = new int[size];
    for (auto i = 0; i < size; i++)
        q[i] = value;
    cout << "constructor 2 called." << endl;
}
vectorInt::vectorInt(const vectorInt& v)
{
    size = v.size;
    q = new int[size];
    for (auto i = 0; i < size; i++)
        q[i] = v.p[i];
    cout << "copy constructor called." << endl;
}
vectorInt::~vectorInt()
{
    free(q);
    cout << "destructor called." << endl;
}
int& vectorInt::at(int index) const
{
    return q[index];
}
int vectorInt::get_size() const
{
    return size;
}
void output(const vectorInt& v)
{
    for (auto i = 0; i < v.size; i++)
        cout << v.q[i] << ",";
    cout << "\b " << endl;
}

实验任务6

.cpp

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

void test() {
    using namespace std;

    double x[] = {1, 2, 3, 4, 5, 6};

    Matrix m1(3, 2);   
    m1.set(x);          
    m1.print();         
    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, 99);  
    m3.print();
}

int main() {
    test();
}

.hpp

#pragma once
#include <iostream>

using std::cout;
using std::endl;

class Matrix {
public:
    Matrix(int n);                     
    Matrix(int n, int m);              
    Matrix(const Matrix& X);          
    ~Matrix();                         

    void set(const double* pvalue);     
    void set(int i, int j, double value); 
    double& at(int i, int j);         
    double at(int i, int j) const;     
    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 = cols = n;
}

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

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

Matrix::~Matrix(){
    delete[] p;
    p = nullptr;
    lines = cols = 0;
}

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

void Matrix::set(int i, int j, double 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 {
    for (int i = 0; i < lines; i++){
        for (int j = 0; j < cols; j++){
            cout << p[i * cols + j] << "";
        }
        cout << endl;
    }
}

 

posted @ 2022-11-09 00:06  斋藤猫  阅读(13)  评论(0)    收藏  举报