实验三
task1-3
1. 学习了普通变量、指针、引用作为形参的用法,理解参数传递过程。
2. auto 自动推导类型
3. new,delete
task4
//vector_int.hpp
#ifndef VECTOR_INT_H #define VECTOR_INT_H #include<cassert> #include<iostream> using std::cout; using std::endl; class Vector_int { public: Vector_int(int n, int init = 0) :size(n) { cout << "dynamic creat array… " << endl; x = new int[n]; for (auto i = 0; i < n; ++i) x[i] = init; } Vector_int(const Vector_int& a) :size(a.size) { x = new int[size]; for (auto i = 0; i < size; ++i) x[i] = a.x[i]; } int& at(int index)//返回下标为index的元素引用 { assert(index >= 0 && index < size); return x[index]; } void show() const { for (auto i = 0; i < size; ++i) cout << x[i] << " "; cout << endl; } ~Vector_int() { cout << "deleting…" << endl; delete[] x; } private: int size;//动态数组大小 int* x; }; #endif
//task4.cpp
#include<iostream> #include"vector_int.hpp" int main() { using namespace std; int n; n = 5; Vector_int x(n); x.show(); Vector_int x2(n, 6); x2.show(); Vector_int y(x); y.show(); y.at(0) = 999; y.show(); }

//Matrix.hpp
#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);//复制构造函数 ~Matrix(); 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;//返回矩阵行数 int get_cols() const;//返回矩阵列数 void print() const;//按行打印 private: int lines;//矩阵行数 int cols;//矩阵列数 double* p;//指向存放矩阵数据的内存块的首地址 }; Matrix::Matrix(int n):lines(n),cols(n) { p = new double[n * n]; } Matrix::Matrix(int n, int m):lines(n),cols(m) { p = new double[n * m]; } Matrix::Matrix(const Matrix& X):lines(X.lines),cols(X.cols) { p = new double[lines * cols]; for (auto i = 0; i < lines * cols; ++i) p[i] = X.p[i]; } Matrix::~Matrix() { delete[] p; } void Matrix::set(const double* pvalue) { for (auto i = 0; i < lines * cols; ++i) p[i] = pvalue[i]; } void Matrix::set(int i, int j, int value) { p[i * cols + j] = value; } double& Matrix::at(int i, int j) { int t = i * cols + j; assert(t >= 0 && t < lines* cols); return p[t]; } double Matrix::at(int i, int j) const { int t = i * cols + j; assert(t >= 0 && t < lines* cols); return p[t]; } int Matrix::get_lines() const { return lines; } int Matrix::get_cols() const { return cols; } void Matrix::print() const { int i, j,k = 0; for (i = 0; i < lines; ++i) { for (j = 0; j < cols; ++j) { cout << p[k] << ", "; k++; } cout << "\b\b \n"; } } #endif
task5
//task5.cpp
#include<iostream> #include"matrix.hpp" int main() { using namespace std; double x[] = { 1,2,3,4,5,6,7,8 }; Matrix m1(4, 2); m1.set(x); m1.print(); cout << "the first line is: \n"; cout << m1.at(0, 0) << " " << m1.at(0, 1) << endl; cout << endl; Matrix m2(2, 4); m2.set(x); m2.print(); cout << "the first line is: \n"; cout << m2.at(0, 0) << " " << m2.at(0, 1) << " " << m2.at(0, 2) << " " << m2.at(0,3) << endl; cout << endl; Matrix m3(m2); m3.set(0, 0, 999); m3.print(); }


浙公网安备 33010602011771号