zoukankan      html  css  js  c++  java
  • 【C++ 实验5 类和对象】

    1.

     1 #include <iostream>
     2 #include <vector>
     3 #include <string>
     4 using namespace std;
     5 
     6 // 函数声明 
     7 void output1(vector<string> &);  
     8 void output2(vector<string> &);  
     9 
    10 int main()
    11 {
    12     vector<string>likes, dislikes; // 创建vector<string>对象likes和dislikes
    13     
    14     
    15     int n;
    16     cin>>n;
    17     getchar();
    18 
    19     int i=0;
    20     for(i=0;i<n;i++){
    21         string a;
    22         getline(cin,a);
    23         likes.push_back(a);
    24     }
    25     // 为vector<string>数组对象likes添加元素值 ( favorite book, music, film, paintings,anime,sport,sportsman,etc) 
    26     // 补足代码 
    27     // 。。。 
    28     
    29     
    30     cout << "-----I like these-----" << endl;
    31     // 调用子函数输出vector<string>数组对象likes的元素值 
    32     // 补足代码
    33     // 。。。 
    34      output1(likes);
    35     
    36     // 为vector<string>数组对象dislikes添加元素值 
    37     // 补足代码 
    38     // 。。。 
    39     for(i=0;i<n;i++){
    40         string b;
    41         getline(cin,b);
    42         dislikes.push_back(b);
    43     }
    44     
    45     cout << "-----I dislike these-----" << endl;
    46     // 调用子函数输出vector<string>数组对象dislikes的元素值 
    47     // 补足代码
    48     // 。。。 
    49      output2(dislikes);
    50     
    51     // 交换vector<string>对象likes和dislikes的元素值 
    52     // 补足代码
    53     // 。。。 
    54     likes.swap(dislikes);
    55     
    56     cout << "-----I likes these-----" << endl;
    57     // 调用子函数输出vector<string>数组对象likes的元素值 
    58     // 补足代码
    59     // 。。。 
    60     output1(likes);
    61     cout << "-----I dislikes these-----" << endl;
    62     // 调用子函数输出vector<string>数组对象dislikes的元素值 
    63     // 补足代码
    64     // 。。。 
    65     output2(dislikes);    
    66                         
    67     return 0;
    68 }
    69 
    70 
    71 // 函数实现 
    72 // 以下标方式输出vector<string>数组对象v的元素值  
    73 void output1(vector<string> &v) {
    74          // 补足程序
    75     // 。。。
    76         for(int i=0; i<v.size(); ++i)
    77         cout << v[i]<<"  "; 
    78         cout<<endl;
    79 }
    80 
    81 // 函数实现
    82 // 以迭代器方式输出vector<string>数组对象v的元素值 
    83 void output2(vector<string> &v) {
    84     // 补足程序
    85     // 。。。 
    86         for(int i=0; i<v.size(); ++i)
    87         cout << v[i]<<"   ";
    88         cout<<endl;
    89 }

    运行截图:

    2.        6-17

    1 #include<iostream>
    2 using namespace std;
    3 int main(){
    4     int *p;
    5     int a=9;
    6     p=&a;//指针p的值等于常量,并且p在内存中没有指向 
    7     cout<<"The value at p:"<<*p;
    8     return 0;
    9 }

     运行截图:

    6-18:

     1 #include<iostream>
     2 using namespace std;
     3 int fn1(){
     4     int *p=new int (5);//这句是从堆上分配一个int型变量所占的字节内存,这个内存单元存放的整数值为5,然后让一个整形的指针变量p指向它的地址。
     5 
     6     return *p;
     7     delete p;//释放内存空间 
     8 } 
     9 int main(){
    10     int a=fn1();
    11     cout<<"The value of a is:"<<a;
    12     
    13     return 0;
    14 } 

    截图:

    注:这个例子中,如果不释放内存,程序仍然会运行出正确结果,那么不释放内存能带来哪些坏处呢?使用new分配内存,不加以释放,会导致动态分配的内存无法回收,使得程序占据的内存越来越大。我想,这需要反汇编才能看出不同。

    3.Matrix.h

    #ifndef MATRIX_H
    #define MATRIX_H
    class Matrix {
        public:
            Matrix(int n); // 构造函数,构造一个n*n的矩阵
            Matrix(int n, int m); // 构造函数,构造一个n*m的矩阵
            Matrix(const Matrix &X); // 复制构造函数,使用已有的矩阵X构造
            ~Matrix(); //析构函数
            void setMatrix(const float *pvalue); // 矩阵赋初值,用pvalue指向的内存块数据为矩阵赋值
            void printMatrix() const; // 显示矩阵
            inline float &element(int i, int j){return *(p+((i-1)*cols)+j-1);} //返回矩阵第i行第j列元素的引用
            inline float element(int i, int j) const{return *(p+((i-1)*cols)+j-1);}// 返回矩阵第i行第j列元素的值
            void setElement(int i, int j, int value); //设置矩阵第i行第j列元素值为value
            inline int getLines() const{ return lines;}//返回矩阵行数
            inline int  getCols() const {return cols;} //返回矩阵列数
        private:
            int lines;    // 矩阵行数
            int cols;      // 矩阵列数
            float *p;   // 指向存放矩阵数据的内存块的首地址
    };
    #endif

     matrix.cpp

     1 #include"matrix.h"
     2 #include<iostream>
     3 using namespace std;
     4 
     5 Matrix::Matrix(int n):lines(n),cols(n){// 构造函数,构造一个n*n的矩阵
     6     p=new float[lines*cols];
     7 
     8 }
     9 Matrix::Matrix(int n,int m):lines(n),cols(m){
    10 
    11    p=new float [lines*cols];
    12 
    13 
    14 }
    15  Matrix::Matrix(const Matrix &X){
    16      lines=X.lines;
    17      cols=X.cols;
    18      p=new float [lines*cols];
    19      for(int i=0;i<lines*cols;i++)
    20     p[i]=X.p[i];
    21 
    22  }
    23 
    24  void   Matrix::setMatrix(const float *pvalue){
    25 
    26      for(int i=0;i<cols*lines;i++){
    27             p[i]=pvalue[i];
    28      }
    29 
    30      cout<<"ceshi2"<<endl;
    31 
    32  }
    33 
    34 void  Matrix::printMatrix() const{
    35    int i,j;
    36    for(i=0;i<lines;i++){
    37     for(j=0;j<cols;j++){
    38         cout<< p[i*cols + j]<<' ';
    39     }
    40     cout<<endl;
    41 
    42    }
    43 
    44 }
    45 
    46 void Matrix::setElement(int i,int j,int value){
    47     p[(i-1)*cols + j-1]=value;
    48 }
    49 Matrix::~Matrix(){
    50   delete []p;
    51   }

    main.cpp

    #include"matrix.h"
    #include<iostream>
    using namespace std;
    int main(){
        int n;
        cin>>n;
        Matrix a(n);//定义一个3*3的矩阵
        float c[n*n];
        cout<<"赋值:"<<endl;
        for(int i=0;i<n*n;i++)
            cin>>c[i];
        a.setMatrix(c);
        cout<<"输出"<<endl;
        a.printMatrix();
        cout<<"输出修改后的值"<<endl;
        a.setElement(1,2,100);
        cout<<"输出"<<endl;
        a.printMatrix();
        Matrix b(3,4);
        cout<<"赋值:"<<endl;
        float d[12];
        for(int i=0;i<12;i++)
            cin>>d[i];
        b.setMatrix(d);
         cout<<"输出"<<endl;
        b.printMatrix();
         cout<<"输出列"<<endl;
       cout<< b.getCols()<<endl;
         cout<<"输出行"<<endl;
        cout<<b.getLines()<<endl;
        cout<<"输出第3行第一个元素"<<endl;
        cout<<b.element(3,1)<<endl;
    
        return 0;
    
    }

    运行截图:

    4.这次的最后一个实验用了很长时间,甚至最后看了不少其他同学的代码才写出来一份完整的来。只看书不动手万万不可!!

  • 相关阅读:
    python面向对象--元类
    python面向对象--类的装饰器
    python--异常处理
    python面向对象--类的内置函数
    python面向对象--类的内置方法
    关于discuz论坛邮箱配置
    python面向对象--item方法
    python面向对象--包装标准类型及组合方式授权
    python面向对象--反射机制
    python面向对象的三大特征--封装
  • 原文地址:https://www.cnblogs.com/yitou13/p/9079355.html
Copyright © 2011-2022 走看看