• C++结构体中使用函数与类中使用函数小结


    #include <iostream>
    #include <string.h>
    using namespace std;
    struct stud//学生信息结构体
    {
        char name[10];
        int num;
        int (* set_info)(char *, int*);//设置学生信息,一般使用回调函数
        void (* print_info)(char *, int);//打印学生信息,一般使用回调函数
    };
    int setinfo(char *name, int *num)//此函数结构体中普通变量赋值
    {
        strcpy(name, "zhang_san");
        *num = 1001;
        return 0;
    }
    void printinfo(char *name, int num)//打印结构体重普通变量
    {
        cout << "name :" << name << endl;
        cout << "num  :" << num  << endl;
    }

    class Time  //时间信息类
    {
        public :
            Time(int = 10, int = 10, int = 10);//构造函数
            ~Time();                        //析构函数
             int set_time(int ,int, int);   //普通函数
             void print_time();             //普通函数
        private:                //普通数据设置为私有
            int hour;
            int minute;
            int sec;
    };
    Time:: Time(int h, int m, int s)//定义构造函数
    {
        hour = h;
        sec = s;
        minute = m;
    }
    Time:: ~Time() //定义析构函数(注意析构函数不能带参数)
    {
        cout << "Will end time! ";
        cout << hour << ":" << minute << ":" << sec << endl;
    }

    int Time::set_time(int h, int s, int m)//定义设置时间函数
    {
        hour = h, sec = s, minute = m;

        return 0;
    }
    void Time:: print_time()        //定义打印时间函数
    {
        cout << hour << ":" << minute << ":" << sec << endl;
    }

    int main()
    {
        //结构体操作
        struct stud student;
      
        student.set_info = setinfo;//或者直接赋值setinfo
        //student.set_info(student.name, &student.num);
        (*student.set_info)(student.name, &student.num);
        student.print_info = &printinfo;
        (*student.print_info)(student.name, student.num);
        //student.print_info(student.name, student.num);//也是正确的
     

       
       
        //类的操作
        Time t;
        class Time *ctime = &t;
        (ctime->print_time)();
       
        int (Time:: *p)(int ,int ,int);
        p = &Time::set_time;    //只能如此赋值
        (ctime->*p)(20, 45, 35);

        void (Time:: *print)();
        print = &Time::print_time; //只能如此赋值
        (ctime->*print)(); //只能如此使用


        //综上可知: 在类中若使用回调函数(即函数指针)则只能p = &Time::set_time;
        //若调用此回调函数只能(ctime->*p)(?, ?, ?);其他都是非法的
        //而在结构体中继承的C语言特性,对函数操作函数名与函数取地址几乎等价的

        return 0;
    }

  • 相关阅读:
    201521123036 《Java程序设计》第1周学习总结
    201521123075 《Java程序设计》第2周学习总结
    201521123075 《Java程序设计》第1周学习总结
    201521123039 《java程序设计》第一周学习总结(新)
    201521123039 《java程序设计》第一周学习总结
    201521123084 《Java程序设计》第2周学习总结
    Problem
    第一周作业及第一周学习总结
    Hello
    201521123092《java程序设计》第八周学习总结
  • 原文地址:https://www.cnblogs.com/xuyh/p/3200581.html
Copyright © 2020-2023  润新知