面试中遇到的问题,求解答

小小蔷薇 2011-10-28 10:23:21
1、函数指针一般用在什么时候,为什么用函数指针

2、写程序:
输入0,输出0
输入1,输出
111
101
111
输入2,输出
22222
21112
21012
21112
22222
依此类推,输入只限于0~9

3、C++语言多态性体现在哪里?

...全文
191 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小蔷薇 2011-11-25
  • 打赏
  • 举报
回复
原来多态性是这么回事:
从广义上说,多态性是指一段程序能够处理多种类型对象的能力。在C++语言中,这种多态性可以通过强制多态、重载多态、类型参数化多态、包含多态4种形式来实现。
强制多态是通过将一种类型的数据转换成另一种类型的数据来实现的,也就是数据类型转换(显示或隐式)。重载是指给同一个名字赋予不同的含义(函数重载或运算符重载)。这两种多态属于特殊多态性,只是表面的多态性。
包含多态和类型参数化多态属于一般多态性,是真正的多态性。C++中采用虚函数实现包含多态。虚函数是多态性的精华。模板是C++实现参数化多态的工具,分为函数模板和类模板两种。
qq120848369 2011-10-28
  • 打赏
  • 举报
回复
22222
21112
21012
21112
22222

很有规律嘛,是1/4对称的,我们就算左上角的矩阵。

第一行是3个2,第二行是2个1,第三行是1个0,对于每一行,红色数字之前的数字均打印一个。

3333333
3222223
3211123
3210123
3211123
3222223

也一样,第一行4个3,第二行3个2,第三行2个1,第四行1个0

gold_water 2011-10-28
  • 打赏
  • 举报
回复
使用DLL中函数时,有时需要
浪游东戴河 2011-10-28
  • 打赏
  • 举报
回复
程序跳到绝对地址时,用函数指针
机智的呆呆 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mingliang1212 的回复:]
c++的多态有两个方面:
运行时多态,也就是虚继承。

编译期多态,通过函数重载
[/Quote]
编译期多态是模板,函数重载是多态倒头一次听说...
iamnobody 2011-10-28
  • 打赏
  • 举报
回复
c++的多态有两个方面:
运行时多态,也就是虚继承。

编译期多态,通过函数重载
小小蔷薇 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liuduo251 的回复:]
函数指针多数是用来实现回调的吧,当你想把函数当参数使用,就用函数指针喽。

多态体现在虚继承吧
[/Quote]

函数指针,他说的好像跟DLL文件有点关系,但是我没弄明白哦
小小蔷薇 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 demon__hunter 的回复:]
1 回调,实现command设计模式,接口和实现分离.
2
3 虚函数那
[/Quote]

多态性,他说除了虚函数,还有函数重载
liuduo251 2011-10-28
  • 打赏
  • 举报
回复
函数指针多数是用来实现回调的吧,当你想把函数当参数使用,就用函数指针喽。

多态体现在虚继承吧
ryfdizuo 2011-10-28
  • 打赏
  • 举报
回复
多态是问虚函数表吧。
2是输出同心矩形,变长为2*x + 1,x为输入的数,[0-9]
机智的呆呆 2011-10-28
  • 打赏
  • 举报
回复
1 回调,实现command设计模式,接口和实现分离.
2
3 虚函数那
luciferisnotsatan 2011-10-28
  • 打赏
  • 举报
回复
1 比如 回调函数
2 这个规律看不出来???
3 多态性体现在哪里?不清楚想问什么
yaningfan 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 zhll879 的回复:]
有时候loadlibrary的时候,里面的函数可能会找不到,用函数指针就会怎么怎么。
这个我不太懂,所以没理解,不知道有没有人知道是什么情况?
怎么会找不到函数呢,用指针怎么会找到呢
[/Quote]
....因为有可能有些生成可执行模块和Dll模块的编译器是不一样的,这样编译器会修改dll中里面的函数的名称。如生成Dll文件的编译器可能会把里面的MyFun函数名称修改成_MyFun@8。这样的话,你在可执行模块中访问Dll的MyFun函数,使用的名称是MyFun。 如果生成可执行模块和Dll模块的编译器不同,在使用GetProcAddress时就会说函数找不到的,这是一种情况。还有一种情况就是两者的编译器都一样,你在可执行模块中使用MyFun函数时,实际上编译器会把它当成_MyFun@8, 函数指针用来保存_MyFun@8函数所在的进程地址空间的地址,以后就通过函数指针去访问这个函数。
小小蔷薇 2011-10-28
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gold_water 的回复:]
使用DLL中函数时,有时需要
[/Quote]

他是说,有时候loadlibrary的时候,里面的函数可能会找不到,用函数指针就会怎么怎么。
这个我不太懂,所以没理解,不知道有没有人知道是什么情况?
怎么会找不到函数呢,用指针怎么会找到呢
yaningfan 2011-10-28
  • 打赏
  • 举报
回复
参考

#include "stdafx.h"
#include <iostream>
using namespace std;
typedef unsigned char BYTE;

int _tmain(int argc, _TCHAR* argv[])
{
cout<<"请输入0-9之间的数:";
char i;
cin>>i;
while (i < '0' || i > '9') {
cout<<"请输入0-9之间的数:";
cin>>i;
}

int num = 2 * (i-48) + 1;
BYTE* arry = new BYTE[num];

// 初始化数组,并输出第一行
for(int j = 0; j < num; j++) {
arry[j] = (i-48);
cout<<(i-48)<<" ";
}
cout<<endl;

int mid = num / 2 + 1;
for(int j = 1; j < num; j++) { // 修改数组中数据
int tmp = num - j;
if(j < mid) {
for(int z = j; z < tmp; z++)
arry[z] -= 1;
}
else {
for(int z = tmp; z < j; z++)
arry[z] += 1;
}

// 修改后,输出这一行
for(int s = 0; s < num; s++) {
cout<<(short)arry[s]<<" ";
}
cout<<endl;
}

delete[] arry;
return 0;
}

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧