【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引用到一个 ...
随机推荐
- mysql5.6 sql_mode设置为宽松模式
最近遇到一个很奇怪的事情 由于数据人员的需求,现在需要修改mysql的sql_mode sql_mode默认是sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_ ...
- IoC之AutoFac(四)——AutoFac在MVC中的使用
阅读目录 Mvc中使用Autofac 第一步:在mvc中添加dll文件,可以通过Nuget直接添加 第二步:在App_Start文件夹中添加一个AutofacConfig类 第三步:在Global.a ...
- C#语法——泛型的多种应用 C#语法——await与async的正确打开方式 C#线程安全使用(五) C#语法——元组类型 好好耕耘 redis和memcached的区别
C#语法——泛型的多种应用 本篇文章主要介绍泛型的应用. 泛型是.NET Framework 2.0 版类库就已经提供的语法,主要用于提高代码的可重用性.类型安全性和效率. 泛型的定义 下面定义了 ...
- maven scope使用和理解
在Maven的依赖管理中,经常会用到依赖的scope设置.这里整理下各种scope的使用场景和说明,以及在使用中的实践心得. scope的使用场景和说明 1.compile 编译范围,默认scope, ...
- Oracle&SQLServer中实现跨库查询
一.在SQLServer中连接另一个SQLServer库数据 在SQL中,要想在本地库中查询另一个数据库中的数据表时,可以创建一个链接服务器: EXEC master.dbo.sp_addlinked ...
- 在 java 开发接口中需要注意的问题
1 在开发过程中免不了对接上游或下游,有合作就要保证入参.出参的准确性.一个接口一般只能处理有限情况下的情况,因此在逻辑处理前要对入参进行校验. 2 在自己的逻辑处理过程中,要时刻持有怀疑的态度.假设 ...
- Atitit s2018 s3 doc list alldvc.docx .docx s2018 s3f doc compc s2018 s3f doc homepc sum doc dvcCompc dtS312 s2018 s3f doc compc\Atitit PathUtil 工具新特性新版本 v8 s312.docx s2018 s3f doc compc\Atitit 操作日
Atitit s2018 s3 doc list alldvc.docx .docx s2018 s3f doc compc s2018 s3f doc homepc sum doc dvcCompc ...
- Linux时区详解
全球24个时区的划分 相较于两地时间表,可以显示世界各时区时间和地名的世界时区表(World Time),就显得精密与复杂多了,通常世界时区表的表盘上会标示着全球24个时区的城市名称,但究竟这24个时 ...
- Git入门到高级系列1-git安装与基础命令
视频课程地址 腾讯课堂 为什么要进行项目文件的版本管理 代码备份和恢复 团队开发和协作流程 项目分支管理和备份 git 是什么? git是一个分布式的版本控制软件.版本控制是一种记录一个或若干文件内容 ...
- 外盘持仓盈亏何时推送---ITapTradeAPINotify::OnRtnPositionProfit
易盛外盘提供了一个可以直接获取持仓盈亏的函数,这个比CTP方便多了 virtual void TAP_CDECL ITapTrade::ITapTradeAPINotify::OnRtnPositio ...