104303李优实验4报告

2026/4/27 14:48:52

二、实验体会:

实验的思路基本固定,但是具体函数的步骤还需自己来设计,往往想的很好但是确实很难实现,通过上网找一些相似代码能够得到很大启发,从而编出自己的作品,这样也是一种自己提高的过程。

感觉相对其他,类运算的程序相对较容易,因为很多题目都是在书上能够找到例题,只要思路明确就能实现。

下面的截图是我的一个错误,当从txt转帖出来时候,就发现我粘错位了,导致运行时给我下了一跳。以后对于此类事情还是要多多注意。

三、思考题:

1、 请举例或结合实验,说明类的封装特点。

答: 一,安全性 二,面向对象 三,代码的复用 四,程序的简洁性和可读性

2、 明构造函数和析构函数的功能和运行机制。

答:

用构造函数对对象进行初始化,构造函数是一种特殊的成员函数,它主要用于:

(1) 为对象分配空间

(2) 为对象的数据成员进行初始化 (3) 其他指定的任务

在建立对象的时,采用构造函数给数据成员赋初值,通常有以下两种形式。 形式1:

类名 对象名[(实参表)];

这里的“类名”与构造函数名相同,“实参表”是为构造函数提供的实际参数。 #include//例3.5-1 using namespace std; class Date{ public:

Date(int y,int m,int d); //声明构造函数Date的原型 void showDate(); //构造函数的名字必须与类名相同 private:

int year; int month; int day; };

Date::Date(int y,int m,int d) //定义构造函数Date {year=y; month=m; day=d; }

inline void Date::showDate()

{ cout<

{ Date date1(2010,4,28);

date1.showDate(); /*定义类Date的对象date1,调用构造函数, 给对象date1的 return 0; 数据成员赋初值*/ }

在建立对象的时,采用构造函数对对象进行初始化,通常有以下两种形式: 形式1:

例如: Date date1(2010,4,28);

类名 对象名 实参表

形式2:

其一般语法形式为:

例如: Date *pdate = new Date(2010,4,28); 类名 *指针变量名=new 类名(实参表); 指针pdate指向该对象的地址

对象名: 匿名对象,或称对象名是(*pdate)

此时,应使用“->”来访问对象的成员,而不是“.”

析构函数

析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于执行一些清理任务,主要有: 1. 释放分配给对象的内存空间。 2. 其他指定的任务

class Student{ //带构造函数的学生类 private:

int number; float score; public:

Student(int number1,float score1);

~Student( ){ cout<<“destructing”;} //①②③ };

Student :: Student(int number1,float score1) { number=number1; score=score1; } class Student{ private:

int number; float score;

public:

Student(int number1,float score1);

~Student( ){ cout<<“destructing”;} };

Student :: Student(int number1,float score1) { number=number1; score=score1; }

① 析构函数与类名相同,但它前面必须加一个波浪号(~) ② 析构函数没有参数,也没有返回值

③ 当撤消对象时,编译系统会自动地调用析构函数

3、 请举例或结合实验,说明友元的工作机制。

答:友元函数

友元函数不是当前类的成员函数,但它可以访问该类所有的成员,包括私有成员、保护成员和公有成员。

在类中声明友元函数时,需在其函数名前加上关键字friend。 友元函数既可以是非成员函数,也可以是另一个类的成员函数。 #include using namespace std; class Date{ public:

Date(int y,int m,int d);//构造函数

friend void showDate(Date&); /*在函数名前加上关键字friend,声明函

数showDate为类Date的友元函数*/

private: int year; int month; int day; };

Date::Date(int y,int m,int d)

{ year=y;month=m;day=d;}/* 定义友元函数,形参是类Date的对象的引用,

在此函数名前不要加关键字friend, 也不要加“类名::”*/

void showDate(Date& d)

{ cout<

{ Date date1(2010,11,14);

showDate(date1); return 0;}/*调用友元函数showDate,实参date1是类

Date的对象*/

说明:

(1)友元函数的声明可以放在公有部分,也可以放在保护部分和私有部分。

(2) 友元函数不是成员函数。因此,在类的外部定义友元函数时,不必像成员函数那样,在函数名前加上“类名∷”。

(3) 因为友元函数不是类的成员,所以它不能直接调用对象成员,它必须通过对象(对象指针或对象引用)作为入口参数,来调用该对象的成员。

(4) 一个函数可以是多个类的友元函数。当一个函数需要访问多个类时,友元函数非常有用。

在C++中为什么要引入友元机制呢?

(1)声明了一个类的友元函数,就可以用这个函数直接访问该类的私有数据,从而提高了程序运行的效率。

(2)友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。尤其 当一个函数需要访问多个类时,友元函数非常有用。

(3)引入友元机制的另一个原因是方便编程,在某些情况下,如运算符被重载时,需要用到友元函数,

友元函数的不足之处:

破坏了数据的隐蔽性和类的封装性,降低了程序的可维护性,这与面向对象的程序设计思想是背道而驰的。因此使用友元函数应谨慎。

友元类

一个类可以作为另一个类的友元,称为友元类。 友元类的说明方法是在另一个类声明中加入语句: friend 类名;

此语句可以放在公有部分也可以放在私有部分。 例如:

class Y {

… /*类Y中的所有成员函数都成为类X的友元函数

类Y中的所有成员函数都可以访问类X中的公有和私有成员*/

};

class X { …

friend Y; //声明类Y为类X的友元类 … };

说明:

(1) 友元关系是单向的,不具有交换性。

若类X是类Y的友元,类Y是否是X的友元,要看在类中是否有相应的声明。 (2) 友元关系也不具有传递性。

若类X是类Y的友元,类Y是类Z的友元,不一定类X是类Z的友元。


104303李优实验4报告.doc 将本文的Word文档下载到电脑
搜索更多关于: 104303李优实验4报告 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219