C++ 上机实验答案 类的定义与应用

更新时间:2024-04-12 09:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验2 类的定义与应用

1、实验目的和要求:

掌握类定义的方法,理解类类型,实例的含义,体会面向对象程序设计中数据隐藏的概念。理解构造函数和析构函数的作用和运行时间,掌握拷贝构造函数的作用。并熟练掌握复杂对象类型的运用。

2、实验内容:

(1)定义一个时间类Time,它能提供由时、分、秒组成的时间。要求能够修改时间和打印出时间。 #include using namespace std; class Time { public:

void displayTime(); void setTime();

private: };

void Time::displayTime() { }

void Time::setTime() { }

cin>>hour>>minute>>second;

cout<

(2)编写一个计数器类,定义一个私有数据成员,通过两个成员函数,分别使其完成加1和减1操作。用构造函数数据成员初始化为0,输出函数可以输出数据成员的值。 #include using namespace std; class counter { public:

void functionP(); void functionM(); void setNum(); void print();

private: };

void counter::functionP() { }

void counter::functionM() { }

void counter::setNum() { }

void counter::print() { }

cout<<\cNum = 0; cNum --; cNum ++; int cNum;

(3)设计一个时间类,要求包含以下功能:

数据成员:时、分、秒 成员函数:

各种重载构造函数 析构函数

可以通过函数分别设置时间的各个组成部分 也可以整体设置时间

有一个tick函数,负责给当前时间加1秒钟,然后输出新的时间 #include using namespace std; class Time { public: private: };

Time::Time(int Hour,int Minute,int Second) {

hour = Hour; minute = Minute; int hour,minute,second; void displayTime(); Time();

Time(int Hour,int Minute,int Second); ~Time();

void setHour(int h); void setMinute(int m); void setSecond(int s);

void setTime(int hou,int min,int sec); void tick();

}

second = Second;

Time::~Time() { }

void Time::setHour(int h) { }

void Time::setMinute(int m) { }

void Time::setSecond(int s) { }

void Time::setTime(int hou,int min,int sec) { }

void Time::tick() {

if(second = 59) {

if(minute = 59) { hour = hou; minute = min; second = sec; second = s; minute = m; hour = h;

cout<<\

}

} else { }

} else { }

second = 0; minute = 0; hour ++;

second = 0; minute ++;

second ++;

#include using namespace std; class Rational {

public:

Rational(int nn,int mm); //构造函数 void R_add(Rational & A); //加 void R_sub(Rational & A); //减 void R_mul(Rational & A); //乘 void R_div(Rational & A); //除 void print(); //以简分数形式显示,注意约分 private:

void simple( ); //约分 int m; //分母 int n; //分子 };

Rational::Rational(int nn,int mm) { n = nn; m = mm; }

void Rational::R_add(Rational &A)

{ n = A.m*n + A.n*m; m = A.m*m; simple(); }

void Rational::R_sub(Rational &A) { n = A.m*n - A.n*m; m = A.m*m; simple(); }

void Rational::R_mul(Rational &A) { n *= A.n; m *= A.m; simple(); }

void Rational::R_div(Rational &A) { n *= A.m; m *= A.n; simple(); }

void Rational::simple() { int num = 1; for(int i = 1;i<=n;i++ ) { if(n%i ==0 && m%i == 0 &&i>=num) num = i; } n = n/num; m = m/num; }

void Rational::print() { cout<

void main() { Rational R1(1,1); Rational R2(5,10); R1.R_mul(R2); R1.print();

}

(5) 定义一个类包含一个整型数的指针变量,在构造函数中用new分配10个整型数的内存空间,在析构函数中用delete释放内存空间,并编写给内存空间赋值和输出的成员函数。

#include using namespace std; class Pointer {

public:

Pointer(); ~Pointer(); private:

int *ptr; };

Pointer::Pointer() {

ptr =new int [10];

for(int i = 0;i<10;i++) cin>>ptr[i]; }

Pointer::~Pointer() {

delete ptr; }

(6) 完成String类

class String {

public:

String(const char *str = NULL); //普通构造函数 String(const String &other); //拷贝构造函数 ~ String(); //析构函数 private:

char *m_data; // 用于保存字符串 };

完成String 的3个成员函数,并编写一个主函数,在主函数中对所编写的成员函数进行测试。

/* 完成String 的3个成员函数,并编写一个主函数,在主函数中对所编写的成员函数进行测试。

*/

#include using namespace std; class String

{ public:

String(const char *str = NULL); //普通构造函数 String(const String &other); //拷贝构造函数 void display();

~ String(); //析构函数 private:

char *m_data; // 用于保存字符串 };

String::String(const char *str) { }

String::String(const String &other) {

if(other.m_data == NULL) { }

m_data = new char [1]; m_data = '\\0'; if(str = NULL) { } else {

int length = strlen(str); m_data = new char [length +1]; strcpy(m_data,str); }

m_data = new char [1]; m_data = '\\0';

else {

int length = strlen(other.m_data); m_data = new char [length +1]; strcpy(m_data,other.m_data); }

}

String::~String() { delete[] m_data;

}

void String::display() { cout<<*m_data<

void main() { const char *str = \ String string1(str); string1.display(); String string2(string1); string1.~String(); string2.display(); string2.~String(); }

7)完成Array类

class Array {

public: Array(); //所有数组元素初始化为0

int& getData(int i); //返回下标为i的数组元素的引用 void print(); //打印出所有数组元素的值 void input(); //对所有数组元素进行输入 private: int m_data[10]; };

完成Array 的成员函数,并编写一个主函数,在主函数中对所编写的成员函数进行测试。

#include using namespace std; class Array { public:

Array(); //所有数组元素初始化为0

int& getData(int i); //返回下标为i的数组元素的引用 void print(); //打印出所有数组元素的值 void input(); //对所有数组元素进行输入 private:

int m_data[10]; };

Array::Array() {

for(int num=0;num<10;num++) m_data[num] = 0; }

int& Array::getData(int i) {

return m_data[i]; }

void Array::input() {

for(int num=0;num<10;num++) cin>>m_data[num]; }

void Array::print() {

for(int num=0;num<10;num++) cout<

void main() {

Array arr; arr.print(); arr.input();

arr.print();

cout<

(8) 定义圆类(由圆心坐标点类和半径组成),利用友元函数判断两个圆的位置关系(圆间关系包括相交、相切、相离)。

(9) 定义类Point.要求定义类对象时,可以有这样的定义语句:

#include using namespace std; class Point { public:

Point (int a, int b) {

x=a;y=b; }

void fun (Point &p); void fun (Point * p); private: int x,y; };

void Point::fun (Point &p) { x=p.x ; y=p.y ;

cout<< \}

void Point:: fun (Point *p) {

x=p->x ; y=p->y ;

cout<< \ }

void main() {

Point p(1,2),q(3,4) ; p.fun(q) ; q.fun(&q); }

改正程序中小的错误,给出程序运行的结果,并对程序进行分析。

3、思考题:

结合编程实践回答下列的问题。 (1) (2) (3)

结合第一个例子,说明什么是类?什么是对象?你是如何理解类和对象的? 面向对象的程序设计与结构化程序设计有何不同? 拷贝构造函数那些情况下会被调用,分别给出例子?

本文来源:https://www.bwwdw.com/article/w9zp.html

Top