实验4 类与数组、指针

task5

//vectorInt.hpp

#pragma once
#include<iostream>

using namespace std;

class vectorInt{
    
public :
    vectorInt(int len) : size{len}{
        cout << "constructor 1 called\n";
        p = new int[size];
    }
    
    vectorInt(int len, int value) : size{len} {
        cout << "constructor 2 called\n";
        p = new int[size];
        for(int i = 0; i < size; i ++)
            *(p + i) = value;
    }
    
    vectorInt(const vectorInt & obj) : size{obj.size} {
        cout << "copy constructor called\n";
        p = new int[size];
        for(int i = 0; i < size; i ++)
            *(p + i) = obj.at(i);
    }
    
    int & at(int i) const{
        return *(p + i);
    }
    
    int get_size() const{
        return size;
    }
    
    friend void output(const vectorInt &x) {
        for(int i = 0; i < x.size; i ++)
            cout << *(x.p + i) << ",";
        cout << "\b \n";
    }
    
    ~vectorInt(){
        cout << "destructor called\n";
        delete []p;    
    }
    
private :
     int *p;
    int size;    
};
//task5.cpp

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

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

测试结果:

 

 

 

 

task6

//Matrix.hpp

#pragma once
#include <iostream>

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

class Matrix {

public:
    Matrix(int n) : lines{n}, cols{n}{
        p = new double[lines * cols];
    }
    
    Matrix(int n, int m) : lines{n}, cols{m}{
        p = new double[lines * cols];
    }
    
    Matrix(const Matrix &X) : lines{X.lines}, cols{X.cols}{
        p = new double[lines * cols];    
        for(int i = 0; i < lines * cols; i ++)
            p[i] = X.p[i];
    }
    
    ~Matrix(){
        delete []p;
    }
    
    
    void set(const double *pvalue){
        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 << "\b \n";
        }
    }
private:
    int lines;
    int cols; 
    double *p;
};
//task6.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, 999);
    m3.print();
}

int main() {
    test();
}

测试结果:

更换一组测试数据的结果:

 

posted @ 2022-11-02 19:03  lyhy  阅读(43)  评论(0)    收藏  举报