西南科技大学C++程序设计实验五(类与对象深入学习 )

一、实验目的

1. 友元的使用。

2. 理解面向对象程序设计中数组、指针、字符串等相关知识点

3.编程掌握类定义数组,数组类等知识

二、实验任务

  1. 阅读分析、完善程序。下面是一个组合类 Line、动态创建对象数组类的定义与实现,其中用到友元函数、友元类、对象数组、指向类的成员函数指针等知识,现要求思考并实验验证程序,回答程序处标注的思考题(注意:为了与知识点对应,程序中思考题标号是打乱的,同学们要读题,并查看整个程序!):

(1)查阅资料回答程序中思考题4,思考题11:总结友元函数的使用特点?

(2)查阅资料回答程序中思考题5,思考题9:友元类的特点?

(3)查阅资料回答程序中思考题1~3:总结类内成员函数指针的使用特点?

(4)查阅资料回答程序中思考题6~8:总结类外调用成员函数指针的使用特点?

(5)查阅资料回答程序中思考题10:总结对象数组的初始化特点?

(6)查阅资料回答程序中思考题11~15:总结动态创建对象数组的方法与使用特点?

(7)查阅资料回答程序中思考题16~17:分析动态创建数组类的功能?

#include

#include

#include

using namespace std;

class Point

{

private:

    int x, y;

public:

    friend class Line// 声明Line 为Point类的友元类

  1.     int (Point::* p)();//函数指针,可指向返回值为整形,形参个数为0的函数,思考1:如果不是指向类内成员函数的指针,需要加类名和作用域标识符吗?加上类名和标识符标识表示指向类内,若不指向类内,则是全局函数,就不需要加了。

Point(int xx=0,int yy=0)

    {

        x = xx; y = yy;

        p = &Point::getx;

    }

    void resetpoint(int xx = 0, int yy = 0)

    {

        x = xx; y = yy;

  1.         p = &Point::getx;//函数指针指向类内成员函数, 思考2:指向成员函数时需要加上代表函数的()吗?需要加取地址符号&吗?给函数指针加类名和作用域标识符,表示函数指针指向该类的成员函数;对于全局函数,没有类名和作用域标识符的限制。

        cout <<"x="<< (this->*p)() <<endl ;//类内调用,思考3: this代表什么?

类内通过函数指针调用成员函数的特点?this表示被函数指针解引用函数所处的类实例化对象.

        p = &Point::gety;//函数指针指向类内成员函数

        cout << "y="<<(this->*p)()<<endl;//类内调用

    }

    void output()

    {

        cout<<"x:"<<x <<",y:"<<y<<endl;

    }

    int getx()//函数返回值为整形,形参个数为0

    {

        return x;

    }

    int gety()//函数返回值为整形,形参个数为0

    {

        return y;

    }

    friend int Distance(Point& a, Point& b); // 声明Distance为Point类的友元函数

};

  1. int Distance(Point& a, Point& b)// Point类的友元函数,思考4:友元函数类外说明时还需要加friend吗?它是否可以使用类外对象访问类的私有数据?Distance函数是一个类外的全局函数,全局函数做友元函数,在类内声明前面需要加friend,类外具体实现时不需要加friend,可以让类外对象访问类的私有数据。

{

    return (sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y)));

}

  1. class Line//Point的友元类,思考5:友元类中的任意成员函数是否可以使用类外对象访问私有数据?

类做友元时,友元类的成员函数都可以访问该类的私有数据.

{

private:

    Point a, b;

public:

    void set(int x1, int y1, int x2, int y2)

    { //Point的友元类中的成员函数可以访问其私有数据

        a.x = x1; a.y = y1; b.x = x2; b.y = y2;

你可能感兴趣的:(C++实验,c++,学习,西南科技大学,visual,studio)