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