首页 > 其他分享 >实验四 类与数组、指针

实验四 类与数组、指针

时间:2022-11-06 16:25:00浏览次数:50  
标签:const Matrix int lines cols 实验 数组 vectorInt 指针

task5:

#pragma once

#include <iostream>
#include <cassert>
#include <string>

using namespace std;

class vectorInt {
    public:
    vectorInt(int n0);
    vectorInt(int n0, int value0);
    vectorInt(const vectorInt &v);
    ~vectorInt();
    
    int &at(int i);
    int get_size() { return n; };
    friend void output(vectorInt &v);
    
    private:
    int n;
    int *p;
};

vectorInt::vectorInt(int n0) : n{n0} {
    cout << "constructor 1 called" << endl;
    p = new int[n0];
}

vectorInt::vectorInt(int n0, int value0) : n{n0} {
    cout << "constructor 2 called" << endl;
    p = new int[n];
    for(auto i = 0;i <= n; i++)
        p[i] = value0;
}

vectorInt::vectorInt(const vectorInt &v) {
    n = v.n;
    p = new int[n];
    for(auto i = 0; i < n; i++)
        p[i] = v.p[i];
    cout << "copy constructor called" << endl; 
}  

vectorInt::~vectorInt() {
    cout << "destructor called" << endl;
    delete[] p;
}

int &vectorInt::at(int i) {
    assert(i >= 0 && i < n);
    return p[i];
} 

void output(vectorInt &v){
    for(auto i = 0; i < v.n; i++)
    cout << v.p[i] << " ";
    cout << endl;
}
#include <iostream>
#include "实验四task5_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:

#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() = default;//构析函数 
        
        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();//按行打印输出矩阵 
        
    private:
        int lines;//矩阵行数 
        int cols;//矩阵列数 
        double *p;//指向存放矩阵数据的内存块的首地址 
};

Matrix::Matrix(int n): lines{n}, cols{n} {
    p = new double[lines * cols];
} 

Matrix::Matrix(int n, int m): lines{n}, cols{m} {
    p = new double[lines * cols];
} 

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];
} 

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) {
    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_cols() const {
    return cols;
}

void Matrix::print() {
    for (auto i = 0; i < lines; i++)
    {
        for (auto j = 0; j < cols; j++)
           cout << p[i * cols + j] << ",";
        cout << "\b " << endl;
    }
}
#include <iostream>
#include "实验四task6_Matrix.hpp"

void test() {
    using namespace std;
    
    double x[] = {10, 11, 12, 13, 14, 15};
    
    Matrix m1(3, 2);//创建一个3×2的矩阵
    m1.set(x);//用一维数组x的值按行为矩阵m1赋值 
    m1.print(); // 打印矩阵m1的值
    cout << "the first line is: " << endl;
    cout << m1.at(0, 0) << " " << m1.at(0, 1) << endl;//输出矩阵m1第1行两个元素的值
    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);//用矩阵m2构造新的矩阵m3
    m3.set(0, 0, 666);//将矩阵m3第0行第0列元素值设为999
    m3.print(); 
}
int main() {
    test();
}

 

标签:const,Matrix,int,lines,cols,实验,数组,vectorInt,指针
From: https://www.cnblogs.com/djynb/p/16862886.html

相关文章

  • 实验二
    实验2:OpenvSwitch虚拟交换机实践(一)基本要求a)/home/用户名/学号/lab2/目录下执行ovs-vsctlshow命令、以及p0和p1连通性测试的执行结果截图;b)/home/用户名/学号/lab2/......
  • 实验三
    基础要求:1.hello控制器6633端口(我最高能支持OpenFlow1.0)--->交换机47646端口交换机47646端口(我最高能支持OpenFlow1.0)--->控制器6633端口于是双方建立连接,并使用Ope......
  • 实验4
    实验任务5#pragmaonce#include<iostream>#include<cassert>usingnamespacestd;classvectorInt{public:vectorInt(intn);vectorInt(intn,intval......
  • 实验四
    任务五:vectorInt.hpp#pragmaonce#include<cassert>#include<iostream>usingnamespacestd;classvectorInt{public:vectorInt(intn);~vectorInt()......
  • 实验一
    最大连续子数组和(最大子段和)问题:给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义......
  • 软件工程第一次实验
    (1)回顾你过去将近3年的学习经历当初你报考的时候,是真正喜欢计算机这个专业吗?是的。计算机专业用电脑进行软件开发,比较有意思。你现在后悔选择了这个专业吗?没有,虽然软......
  • 实验7:基于REST API的SDN北向应用实践
    1.编写Python程序,调用OpenDaylight的北向接口实现以下功能(1)利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight;启动OpendDaylight:./distribution-karaf-0.6.4-Car......
  • 实验一 任务一
    (1)回顾你过去将近3年的学习经历当初你报考的时候,是真正喜欢软件工程这个专业吗?你现在后悔选择了这个专业吗?你认为你现在最喜欢的领域是什么(可以是计算机的也可以是其......
  • Java基础----数组
    什么是数组数组就是一串数字,一下子可以定义多个值格式:数组类型 变量名称=变量值(可能不对具体看代码)平时总要inti=0.....有了数组可以直接int[]b=newint[10......
  • 实验一郭蕊
    (1)回顾你过去将近3年的学习经历当初你报考的时候,是真正喜欢软件工程这个专业吗?是的。你现在后悔选择了这个专业吗?不后悔。你认为你现在最喜欢的领域是什么(可以是计......