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

原文地址:https://www.cnblogs.com/yitou13/p/9079355.html

时间: 2024-10-09 09:45:46

【C++ 实验5 类和对象】的相关文章

JAVA实验4 类与对象(封装继承多态等机制的使用)

实验四 类与对象(封装.继承.多态等机制的使用) 实验内容: 1. 编写一个名为TwoDimensionalShape的抽象类,拥有属性area和circumference表示面积和周长,以及抽象方法getArea()和getCircumference(),用于获取面积和周长. 2. 编写Printable接口,包括一个抽象方法printShapeInfo,用于输出图形信息. 3. 分别编写Rectangle.Triangle.Circular三个类,用于描述矩形.三角形和圆形,要求继承于Two

JAVA实验3 类与对象

实验要求: 掌握类与对象的基本思想 能够熟练地使用Java设计并编写类 能够灵活运用各种对象 实验内容: 希腊神话中,宙斯战胜了泰坦之后成为众神之王,以此为背景,通过构造相应对象.属性和方法,并用随机的方式,模拟宙斯与泰坦的战斗过程. 构建类Titan,要求如下: 整形字段HP,以及相应的getter和setter 空参数列表构造方法Titan(),创造出的HP默认为700 带参数构造方法Titan(int HP),创造出指定HP的对象 方法attack(Zues z),参数为宙斯对象,每次调用

实验三 类与对象(zxt)

//以下为课上的实现虚数相加的内容,以及我的疑惑(懵逼) 这个代码存在问题,只能运行整数不能运行浮点数,以下为2.0版本 这回的又有一些问题,这个源代码是老师ppt上的,main函数中的部分是我写的.但是由于我想既能进行整数和浮点数的加法,所以我设置为了double类型.由此导致我只能调用double add( ),int add( )完全没用,如果不把m,n,p,q都设置为double类型,比如:把m,p设置为整型值,说明你已经知道m,p为整型值,这样的话输入的范围就有了限制,我又不想这样,是

实验 4 类和对象-2

四.实验 Graph 1.类Graph的声明 #ifndef GRAPH_H #define GRAPH_H // 类Graph的声明 class Graph { public: Graph(char ch, int n); // 带有参数的构造函数 void draw(); // 绘制图形 private: char symbol; int size; }; 2.类Graph的实现 #include "graph.h" #include <iostream> using

实验4 类与对象2

实验结论 1.实验内容2 (2)文件源码 graph.h #ifndef GRAPH_H #define GRAPH_H // 类Graph的声明 class Graph { public: Graph(char ch, int n); // 带有参数的构造函数 void draw(); // 绘制图形 private: char symbol; int size; }; #endif graph.cpp // 类graph的实现 #include "graph.h" #include

实验3 类和对象

实验结论 4-11 定义并实现一个矩形类,有长,宽两个属性,由成员函数计算矩形的面积. #include <iostream> using namespace std; class rectangle{ public: rectangle(float length, float wide); float area(); private: float l, w; }; rectangle::rectangle(float length, float wide){ l=length; w=wide

实验五 类和对象-3 zxt

实验一:运行ex1.cpp 实验二:ex2.cpp   实验三:补全ex3.cpp并运行 我以为是自己喜欢和不喜欢的呢...... 实验四:习题6-17 实验五:习题6-18 实验六:matrix类 我智障的没看见matrix.h,自己写的matrix,我都要写傻了,还运行不出来......求解决 实验七:期中考试第一题 写完突然意识到,忘了释放,要不然会造成内存泄漏,会有很严重的后果,尴尬 我真是老年人的脑袋,啥都忘...... 修改以后如下: 实验八:期中考试第二题 当密码输入错误时 实验九

实验5 类和对象3

四.实验结论 实验内容1 vector3.cpp 完整程序 #include <iostream> #include <vector> #include <string> using namespace std; // 函数声明 void output1(vector<string> &); void output2(vector<string> &); int main() { vector<string>likes

实验3类与对象

4-11 #include<iostream> using namespace std; class Rectangle{ public: Rectangle(float length,float width); private: float l; float w; }; Rectangle::Rectangle(float length,float width){ l=length; w=width; } int main(){ float l; float w; cout<<&