【C++ 实验5 类和对象】
1.
#include <iostream>
#include <vector>
#include <string>
using namespace std; // 函数声明
void output1(vector<string> &);
void output2(vector<string> &); int main()
{
vector<string>likes, dislikes; // 创建vector<string>对象likes和dislikes int n;
cin>>n;
getchar(); int i=;
for(i=;i<n;i++){
string a;
getline(cin,a);
likes.push_back(a);
}
// 为vector<string>数组对象likes添加元素值 ( favorite book, music, film, paintings,anime,sport,sportsman,etc)
// 补足代码
// 。。。 cout << "-----I like these-----" << endl;
// 调用子函数输出vector<string>数组对象likes的元素值
// 补足代码
// 。。。
output1(likes); // 为vector<string>数组对象dislikes添加元素值
// 补足代码
// 。。。
for(i=;i<n;i++){
string b;
getline(cin,b);
dislikes.push_back(b);
} cout << "-----I dislike these-----" << endl;
// 调用子函数输出vector<string>数组对象dislikes的元素值
// 补足代码
// 。。。
output2(dislikes); // 交换vector<string>对象likes和dislikes的元素值
// 补足代码
// 。。。
likes.swap(dislikes); cout << "-----I likes these-----" << endl;
// 调用子函数输出vector<string>数组对象likes的元素值
// 补足代码
// 。。。
output1(likes);
cout << "-----I dislikes these-----" << endl;
// 调用子函数输出vector<string>数组对象dislikes的元素值
// 补足代码
// 。。。
output2(dislikes); return ;
} // 函数实现
// 以下标方式输出vector<string>数组对象v的元素值
void output1(vector<string> &v) {
// 补足程序
// 。。。
for(int i=; i<v.size(); ++i)
cout << v[i]<<" ";
cout<<endl;
} // 函数实现
// 以迭代器方式输出vector<string>数组对象v的元素值
void output2(vector<string> &v) {
// 补足程序
// 。。。
for(int i=; i<v.size(); ++i)
cout << v[i]<<" ";
cout<<endl;
}
运行截图:
2. 6-17
#include<iostream>
using namespace std;
int main(){
int *p;
int a=;
p=&a;//指针p的值等于常量,并且p在内存中没有指向
cout<<"The value at p:"<<*p;
return ;
}
运行截图:
6-18:
#include<iostream>
using namespace std;
int fn1(){
int *p=new int ();//这句是从堆上分配一个int型变量所占的字节内存,这个内存单元存放的整数值为5,然后让一个整形的指针变量p指向它的地址。 return *p;
delete p;//释放内存空间
}
int main(){
int a=fn1();
cout<<"The value of a is:"<<a; return ;
}
截图:
注:这个例子中,如果不释放内存,程序仍然会运行出正确结果,那么不释放内存能带来哪些坏处呢?使用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-)*cols)+j-);} //返回矩阵第i行第j列元素的引用
inline float element(int i, int j) const{return *(p+((i-)*cols)+j-);}// 返回矩阵第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
#include"matrix.h"
#include<iostream>
using namespace std; Matrix::Matrix(int n):lines(n),cols(n){// 构造函数,构造一个n*n的矩阵
p=new float[lines*cols]; }
Matrix::Matrix(int n,int m):lines(n),cols(m){ p=new float [lines*cols]; }
Matrix::Matrix(const Matrix &X){
lines=X.lines;
cols=X.cols;
p=new float [lines*cols];
for(int i=;i<lines*cols;i++)
p[i]=X.p[i]; } void Matrix::setMatrix(const float *pvalue){ for(int i=;i<cols*lines;i++){
p[i]=pvalue[i];
} cout<<"ceshi2"<<endl; } void Matrix::printMatrix() const{
int i,j;
for(i=;i<lines;i++){
for(j=;j<cols;j++){
cout<< p[i*cols + j]<<' ';
}
cout<<endl; } } void Matrix::setElement(int i,int j,int value){
p[(i-)*cols + j-]=value;
}
Matrix::~Matrix(){
delete []p;
}
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=;i<n*n;i++)
cin>>c[i];
a.setMatrix(c);
cout<<"输出"<<endl;
a.printMatrix();
cout<<"输出修改后的值"<<endl;
a.setElement(,,);
cout<<"输出"<<endl;
a.printMatrix();
Matrix b(,);
cout<<"赋值:"<<endl;
float d[];
for(int i=;i<;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(,)<<endl; return ; }
运行截图:
4.这次的最后一个实验用了很长时间,甚至最后看了不少其他同学的代码才写出来一份完整的来。只看书不动手万万不可!!
【C++ 实验5 类和对象】的更多相关文章
- c++实验3类和对象
实 验 3: part 1:验证 part 2:graph #include <iostream> #include "graph.h" using namespac ...
- C++ 实验3 类和对象
Part 2 #ifndef GRAPH_H #define GRAPH_H class Graph { public: Graph(char ch, int n); void draw(); pri ...
- 【C++/实验三】类和对象
1.定义一个矩形类,有长,宽两个属性,有成员函数计算矩形的面积. 在该矩形类中,我做了5个主要的测试. 构造函数带默认值参数,利用默认值参数计算矩形面积:rectangle(double x=2.0, ...
- 第四周总结和实验二Java简单类与对象
实验目的 掌握类的定义,熟悉属性.构造函数.方法的使用,掌握用类作为类型声明变量和方法返回值: 理解类和对象的区别,掌握构造函数的使用,熟悉通过对象名引用实列的方法和属性: 理解static修饰对类. ...
- C++ Daily 《6》---- 类静态对象与函数静态对象
C++ 的一个哲学基础是,你不应该为你使用的东西付出代价. class 拥有一个 static 成员,即使从未被用到,它也会被构造和析构: 而 函数拥有一个 static 成员, 如果这个函数从未被调 ...
- iOS RunTime运行时(1):类与对象
Objective-C语言是一门动态语言,他将很多静态语言在编译和链接期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码更具有灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一下 ...
- JAVA入门第二季 第一章 类和对象
面向对象编程 Object Oriented Programming OOP 第一.什么是类和对象 在具体说明类和对象之前,先说说别的. 眼睛在人类身体上最为有用的器官.如果一个没有了眼睛,这个人与世 ...
- php学习小记2 类与对象
php类的一些特性: 1. 伪变量$this.$this是一个到主叫对象的引用.取值:该方法所从属的对象,可能是另外的对象(前提,当该方法被静态调用时).$this变量存在于一个类的非静态方法中,在静 ...
- 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感
关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...
随机推荐
- 采石厂管理系统V3.0版本上线(采石厂车辆出入管理系统,石厂开票系统)
新版系统包含老版所有功能,软件基础功能请点击查看<采石管理系统,采石厂车辆出入管理系统> 新增功能点 近期对采石厂管理系统进行了升级和完善,系统更加灵活好用,应用场景更加广泛.主要更新一下 ...
- Delphi提取PDF文本
生成PDF的控件很多,但解析的不是太多,pdf Toolkit可以,但测试的第一个复杂的pdf就报告错误,并且汉字乱码,可能使用的版本或使用方法不对. 想起之前使用java调用的Apache名下的pd ...
- caffe可重入单例机制分析
一个函数可重入是指该函数可以被多个线程同时调用.大多数函数都不是可重如的,因为很多函数会修改静态数据结构里的内容,如果多个线程同时调用,势必破坏共享的静态结构.可以在不改变公共接口的情况下,将一个非重 ...
- linux上ssh免密登录原理及实现
因为我的服务器集群需要回收日志到中央进行统一处理,所以需要建立ssh互信关系实现免密登录.关于ssh的使用大家可能都很熟悉了,我们今天主要来讲下ssh连接和免密登录的原理. scp 传输文件 scp( ...
- 每天进步一点点——mysql——mysqlbinlog
一. 简单介绍 mysqlbinlog:用于查看server生成的二进制日志的工具. 二. 命令格式 mysqlbinlog 选项日志文件1 三. 经常使用參数 ...
- Python 简单入门指北(二)
Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...
- 100BASE-TX、100Base-FX等含义
100BASE-TX:双绞线,使用两对非屏蔽双绞线或两对1类屏蔽双绞线连接,传输距离100米 100Base-FX,是在光纤上实现的100 Mbps以太网标准,其中F指示光纤,IEEE标准为802.3 ...
- 【转载】多模式串匹配之AC自动机
原文地址:https://www.cnblogs.com/codeape/p/3845375.html 目录 [隐藏] 一.概述 二.AC算法思想 三.字典树tire的构造 四.搜索路径的确定 附录: ...
- js date 前一天
Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, //月份 "d ...
- .net reactor使用教程(一)——界面各功能说明(转)
概述:安装了.net reactor之后,可以在安装目录下找到帮助文档REACTOR_HELP.chm,目前没有中文版本,里面详细介绍了.net reactor的各功能及使用场景. 安装了.net ...