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!\n";
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;
}
C++结构体中使用函数与类中使用函数小结的更多相关文章
- 【转载】 C++多继承中重写不同基类中相同原型的虚函数
本篇随笔为转载,原文地址:C++多继承中重写不同基类中相同原型的虚函数. 在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: ...
- Flex中如何利用FocusManager类的setFocus函数设置TextInput的焦点的例子
参考:https://blog.csdn.net/liruizhuang/article/details/5876455 <?xml version="1.0" encodi ...
- android开发中关于继承activity类中方法的调用
android开发中关于继承activity类中的函数,不能在其他类中调用其方法. MainActivity.java package com.example.testmain; import and ...
- asp.net 类库中获取session c#类中获取session
asp.net 类库中获取session c#类中获取session 1. 先引入命名空间 using System.Web; using System.Web.SessionState; 在使用H ...
- 在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句:
在动态sql的使用where时,if标签判断中,如果实体类中的某一个属性是String类型,那么就可以这样来判断连接语句: 如果是String类型的字符串进行判空的时候: <if test=&q ...
- 关于static函数在类中的定义和使用
刷题的时候遇到了这样一个问题:平时经常使用 sort()函数, 对结构体进行排序, 但是在类中使用时会出现 这样的错误提示:“Solution::cmp”: 函数调用缺少参数列表:请使用“&S ...
- 结构体(struct)与类(class)
在 C++ 的范畴里,除了 struct 结构体不支持访问权限修饰符(private.protected.public)外,已不再区分二者的其他方面语法上的差异. 因此,在 C++ 编程中,如果一个类 ...
- Swift建立栈的泛型结构体以及top()、push()、pop()定义函数的定义
首先可以使用swift定义Stack的结构体 //泛型表达 struct Stack<T> { var items = <T>() //定义栈顶函数,返回栈顶元素 mutati ...
- Linux 网络编程详解一(IP套接字结构体、网络字节序,地址转换函数)
IPv4套接字地址结构 struct sockaddr_in { uint8_t sinlen;(4个字节) sa_family_t sin_family;(4个字节) in_port_t sin_p ...
随机推荐
- luogu3698 [CQOI2017]小Q的棋盘
最长链是根节点到深度最深的结点的路径. 显然,要么直接走最长链,要么兜兜转转几个圈圈再走最长链,而最长链以外的结点因为要"兜圈",所以要经过两次. #include <ios ...
- Centos7 安装python3详细教程,解决升级后不兼容问题
一.确认当前python版本 [root@centos Python-3.6.1]# python Python 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC ...
- numpy.clip(a, a_min, a_max, out=None)(values < a_min are replaced with a_min, and those > a_max with a_max.)
numpy.clip(a, a_min, a_max, out=None) Clip (limit) the values in an array. Given an interval, values ...
- 【管理】个人主义—>集体主义
导读:这个月作为学术部负责人,暴露了很多问题,个人的,集体的!我需要思考的,有很多.现在,我反思图书馆丢书这件事的处理方案:我虽然站在了管理层,却做着员工干的事儿.以一种个人主义.英雄主义去做事儿.却 ...
- POJ-2187 Beauty Contest,旋转卡壳求解平面最远点对!
凸包(旋转卡壳) 大概理解了凸包A了两道模板题之后在去吃饭的路上想了想什么叫旋转卡壳呢?回来无聊就搜了一下,结果发现其范围真广. 凸包: 凸包就是给定平面图上的一些点集(二维图包),然后求点集组成的 ...
- [BZOJ2733] [HNOI2012]永无乡(并查集 + 线段树合并)
传送门 一看到第k大就肯定要想到什么权值线段树,主席树,平衡树之类的 然后就简单了 用并查集判断连通,每个节点建立一颗权值线段树,连通的时候直接合并即可 查询时再二分递归地查找 时间复杂度好像不是很稳 ...
- 【2018.9.20】JOI 2017 Final T3「JOIOI 王国 / The Kingdom of JOIOI」
题目链接 题目描述 JOIOI 王国是一个 $H$ 行 $W$ 列的长方形网格,每个 $1\times 1$ 的子网格都是一个正方形的小区块.为了提高管理效率,我们决定把整个国家划分成两个省 $JOI ...
- 【2017.12.18】Dijkstra专题
先友情提示一下,作者很早就会这个算法了,只不过这么久以来没怎么写过博客.现在正在学习它的拓展,干脆就把这个算法相关的内容整个敲一遍吧!本章把迪杰斯特拉从基础到拓展全都说一遍咯. 下面是优先队列(堆)优 ...
- cf299C Weird Game
Weird Game Yaroslav, Andrey and Roman can play cubes for hours and hours. But the game is for three, ...
- poj 2115 二元一次不定方程
C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14765 Accepted: 3719 Descr ...