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

实验四 类与数组、指针

时间:2022-11-06 21:45:07浏览次数:43  
标签:const Matrix int double cols 实验 数组 vectorInt 指针

一.实验任务1-4

总结:通过完成实验任务1-4,我对深复制和浅复制有了更加深刻的印象,加深对指针、引用作为形参用法的理解,理解了参数传递的过程。

二.实验任务5

1.源代码:

(1)vectorInt.hpp

#pragma once
#include<iostream>
#include<cassert>
using namespace std;
class vectorInt{
public:
vectorInt(int n0):size(n0),value(0){//构造函数1
p=new int [size];
cout<<"constructor1 called."<<endl;
for(int i=0;i<size;i++)
p[i]=value;
};

vectorInt(int n0,int x0):size(n0),value(x0){//构造函数2

    int i;
    p=new int[size];
            cout<<"constructor2 called."<<endl;
    for(i=0;i<size;i++)
    p[i]=value;

};

vectorInt(const vectorInt &a)
{       
    int i;
     size=a.size;
     value=a.value;
     p=new int[size];
      cout<<"copy constructor called."<<endl;
     for(i=0;i<size;i++)
    p[i]=a.p[i];
}

int &at(int index);

int get_size(){
    return size;
}

friend void output(vectorInt &v1);
~vectorInt(){
    delete[]p;
    cout<<"destructor called."<<endl;
}

private:
int size,value;
int *p;
};

void output(vectorInt &v1){
for(int i=0;i<v1.size;i++)
cout<<v1.p[i]<<", ";
cout<<endl;
}

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

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

2.运行测试:

 

三、实验任务六

1.源代码:

(1)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_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(int i=0;i<lines;i++){
    for(int j=0;j<cols;j++){
        p[i*cols+j]=x.p[i*cols+j];
    }
}
}

Matrix::~Matrix(){
    delete[]p;
}

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;
     pvalue++;
   }
}
}

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

double& Matrix::at(int i,int j){
    return p[i*cols+j];
}

int Matrix::get_lines()const{
    return lines;
}

int Matrix::get_cols()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<<"\b \n";
}}

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

 

2.运行测试:

更换数据后:

 

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

相关文章

  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实......
  • c原因学习---指针作为函数的形参
     指针作为函数的形参,可以改变实参的值。#include<stdio.h>//交换两个变量的值intswap(intx,inty){intk=y;y=x;x=k;printf("xi......
  • 实验7:基于REST API的SDN北向应用实践
    实验7:基于RESTAPI的SDN北向应用实践一、实验目的能够编写程序调用OpenDaylightRESTAPI实现特定网络功能;能够编写程序调用RyuRESTAPI实现特定网络功能。二、实验......
  • C语言学习---星花与取地址&----以及多级指针
    #include<stdio.h>intmain{//对一个表达式加*,就会对表达式减一级星花*,//如果对表达式取&,就会加一级*int*p;int**q;q......
  • 实验7:基于REST API的SDN北向应用实践
    (一)基本要求编写Python程序,调用OpenDaylight的北向接口实现以下功能(1)利用Mininet平台搭建下图所示网络拓扑,并连接OpenDaylight;建立拓扑sudomn--topo=single,3--cont......
  • 梁添翔实验一个人项目
    (1)回顾你过去将近3年的学习经历当初你报考的时候,是真正喜欢软件工程这个专业吗?答:当退伍回来之后,就感觉自己的文化程度还不够,因此就希望拿起笔墨为自己的人生书写一笔,我......
  • 实验3
    1 #include<stdio.h>#include<stdlib.h>#include<time.h>#include<Windows.h>#defineN80voidprint_text(intline,intcol,chartext[]);voidprint_spaces(intn);......
  • 实验一 个人项目
    (1)回顾你过去将近3年的学习经历当初你报考的时候,是真正喜欢软件工程这个专业吗?是因为喜欢,从小就喜欢,或者第一次上微机课就被计算机所吸引就爱上了计算机,就想学计算......
  • 实验4
    vectorInt.hpp#pragmaonce#include<iostream>#include<cassert>usingnamespacestd;classvectorInt{public:vectorInt(intn);vectorI......
  • 《java练级之路》之数组为什么成为引用类型
    ......