实验四

vectorInt.hpp

#pragma
once #include<iostream> #include<cassert> using namespace std; class vectorInt { public: vectorInt(int n); vectorInt(int n, int value); vectorInt(const vectorInt& vi); ~vectorInt(); int& at(int index); int get_size(); friend void output(const vectorInt& vi); private: int size; int* p; }; vectorInt::vectorInt(int n) :size{ n } { cout << "constructor 1 called." << endl; p = new int[n]; } vectorInt::~vectorInt() { cout << "destructor called." << endl; delete p; } int &vectorInt::at(int index) { assert(index >= 0 && index < size); return p[index]; } vectorInt::vectorInt(const vectorInt& vi) :size{vi.size} { cout << "copy constructor called." << endl; p = new int[size]; for (auto i = 0; i < size; i++) p[i] = vi.p[i]; } vectorInt::vectorInt(int n, int value) :size{ n } { cout << "constructor 2 called." << endl; p = new int[n]; for (auto i = 0; i < n; i++) { p[i] = value; } } int vectorInt::get_size() { return size; } void output(const vectorInt& vi) { for (auto i = 0; i < vi.size; i++) cout << vi.p[i] << ", "; cout << "\b\b \n"; }

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

 

 

 

 

六:

Matrix.hpp

#pragma once
#include<iostream>

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

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)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 } {
    //cout << "constructor 1 called." << endl;
    p = new double[n * n];
}
Matrix::Matrix(int n, int m) :lines{ n }, cols{ m } {
    //cout << "constructor 2 called." << endl;
    p = new double[n * m];
}
Matrix::Matrix(const Matrix& x) :lines{ x.lines }, cols{x.cols} {
    //cout << "copy constructor called." << endl;
    p = new double[lines * cols];
    for (auto i = 0; i < lines * cols; i++) {
        p[i] = x.p[i];
    }    
}
Matrix::~Matrix() {
    //cout<< "destructor called." << endl;
    delete p;
}
void Matrix::set(const double* pvalue) {
    for (auto i = 0; i < lines * cols; i++) {
        p[i] = pvalue[i];
    }
}
void Matrix::print()const {
    int k = 0;
    for (auto j = 0; j < lines; j++) {
        for (auto i = 0; i < cols; i++) {
            cout << p[k++] << ", ";
        }
        cout << "\b\b \n";
    }
}
void Matrix::set(int i, int j, int value) {
    p[i*cols+j] = value;
}
double Matrix::at(int i, int j)const{
    return p[i*cols+j];
}

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();
    cout << endl;
    
}
int main()
{
    test();
}

 

posted @ 2022-11-09 12:11  戴鲁  阅读(19)  评论(0编辑  收藏  举报