实验四 类与数组、指针

实验任务5

vectorInt.h

#pragma once
#include<iostream>
using namespace std;
class vectorInt
{
private:
    int size;
    int* p;
public:
    vectorInt(int n) :size{ n } {
        cout << "constructor1 called." << endl;
        p = new int[size];
    }
    vectorInt(int n, int value) :size{ n } {
        cout << "constructor2 called." << endl;
        p = new int[size];
        for (auto i = 0; i < size; i++)
            p[i] = value;
        cout << "one" << endl;
    }
    vectorInt(const vectorInt& obj) :size{ obj.size } {
        cout << "copy constructor called." << endl;
        p = new int[size];
        for (auto i = 0; i < size; i++)
            p[i] = obj.p[i];
    }
    ~vectorInt() {
        cout << "dynamic delete array..." << endl;
        delete[] p;
    }

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

    friend void output(vectorInt& obj1)
    {
        int i;
        for (i = 0; i < obj1.size; i++)
            cout << obj1.p[i] << " ";
        cout << endl;
    }
};


task5.cpp

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

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();
}

image


实验任务6

Matrix.h

#ifndef task5
#define task5

#include <iostream>

using namespace std;

class Matrix{
public:
    Matrix(int n) : lines(n), cols(n) { p = new double[n * n]; };
    Matrix(int n, int m) : lines(n), cols(m) { p = new double[n * m]; }; 
    Matrix(const Matrix& X) : lines(X.lines), cols(X.cols){
        p = new double[X.lines * X.cols];
        for (int i = 0; i < X.lines * X.cols; ++i)
            p[i] = X.p[i];
    }

    ~Matrix() { free(p); }; 
    void set(const double* pvalue){
        p = new double[lines * cols];
        for (int i = 0; i < lines * cols; ++i)
            p[i] = pvalue[i];
    }; 
    void set(int i, int j, int value) { p[i * cols + j] = value; }
    double& at(int i, int j) { return p[i * cols + j]; } 
    double at(int i, int j) const { return p[i * cols + j]; }
    int get_lines() const { return lines; }
    int get_cols() const { return cols; }
    void print() const{
        for (int i = 0; i < lines; ++i){
            for (int j = 0; j < cols; ++j)
                cout << p[i * cols + j] << " ";
            cout << endl;
        }
    }
private:
    int lines;
    int cols;
    double* p;
};
#endif

task6.cpp

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

int main()
{
    using namespace std;
    double x[] = { 0,2,4,8,1,3,5,7 };
    Matrix m1(2, 3);
    m1.set(x); 
    cout << "m1:" << endl;
    m1.print();
    cout << "the first line is: " << endl;
    cout << m1.at(0, 0) << " " << m1.at(0, 1) << " " << m1.at(0, 2) << " " << m1.at(0, 3) << endl;
    cout << endl;
    Matrix m2(2, 2);
    m2.set(x);
    cout << "m2:" << endl;
    m2.print();
    cout << "the first line is: " << endl;
    cout << m2.at(0, 0) << " " << m2.at(0, 1) << endl;
    cout << endl;
    Matrix m3(m2);
    m3.set(0, 0, 9);
    cout << "m3:" << endl;
    m3.print();
    return 0;
}

image

posted @ 2022-11-06 14:30  Cali-AKA  阅读(14)  评论(0)    收藏  举报