实验四
实验任务五
vectorInt.hpp
#pragma once
#include<iostream>
#include<cassert>
using namespace std;
class vectorInt {
public:
vectorInt(int n);
vectorInt(int n, int v);
vectorInt(vectorInt& vp);
~vectorInt();
int& at(int i);
int get_size() { return size; }
private:
int size;
int* k;
friend void output(vectorInt& x);
};
vectorInt::vectorInt(int n) :size{ n } {
cout << "constructor 1 called.\n";
k = new int[size];
}
vectorInt::~vectorInt() {
cout << "destructor called.\n";
delete[]k;
}
int &vectorInt::at(int i) {
assert(i >= 0 && i < size);
return p[i];
}
vectorInt::vectorInt(int n, int v): size { n }{
cout << "constructor 2 called.\n";
k = new int[size];
for (auto i = 0; i < size; i++)
k[i] = v;
}
vectorInt::vectorInt(vectorInt& vp) :size{ vp.size } {
cout << "copy constructor called,\n";
k = new int[size];
for (auto i = 0; i < size; i++)
k[i] = vp.k[i];
}
void output(vectorInt& x) {
for (auto i = 0; i < x.size; i++)
cout << x.k[i] << ", ";
cout << "\b\b \n";
}
task5.cpp
#include <iostream>
#include"vectorInt.hpp"
using namespace std;
void test() {
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);
Matrix(int n,int m);
Matrix(const Matrix &x);
~Matrix();
void set(const double *pvalue);
void set(int i,int j,int value);
double &at(int i,int j);
double at(int i,int j) const;
int get_lines() const;
int get_colos() 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(int i=0;i<lines;i++){
for(int j=0;j<cols;j++){
p[i*cols+j]=x.p[i*cols+j];
}
}
}
void Matrix::set(const double *pvalue){
for(int i=0;i<lines;i++){
for(int j=0;j<cols;j++){
p[i*cols+j]=*(pvalue++);
}
}
}
void Matrix::set(int i,int j,int 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_colos() 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;
}
}
Matrix::~Matrix(){
delete[] p;
}
task6.cpp
#include<iostream>
#include"matrix.hpp"
void test(){
using namespace std;
double x[]={1,2,3,4,5,6,7,8,9,10};
Matrix m1(4,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,4);
m2.set(x);
m2.print();
cout<<"the first line is: "<<endl;
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(1,2,666);
m3.print();
}
int main(){
test();
}


浙公网安备 33010602011771号