zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    手机版页面跳转
    设计模式转载(史上最全设计模式导学目录|完整版)
    linux 常用命令
    数据结构与算法JavaScript描述.
    常用算法js版(冒泡排序 ,选择排序 ,插入排序 ,希尔排序 ,归并排序 ,快速排序 ,堆排序 ,计数排序 ,桶排序 ,基数排序)
    伪元素和伪类
    双向数据绑定
    2016年黑马程序员已出品各学科最新学习路线图:
    jQuery插件开发全解析
    蛋白质、碳水化合物和脂肪
  • 原文地址:https://www.cnblogs.com/xuyh/p/3200581.html
Copyright © 2011-2022 走看看