注册 登录
编程论坛 C++教室

我这个多态性为什么用起来不灵啊!!!!!

xiangz9025 发布于 2007-12-11 16:10, 1068 次点击
#include <iostream.h>
unsigned long left(unsigned long num,unsigned  ct);
char *abc(const char *str,int n=1);
void main()
{
//    using namespace std;  //面向对象
    char *trip = "Hawaii";
    unsigned long n = 12345678,m;
    unsigned i;
    char *temp;
    for(i=1;i<10;i++)
    {
        m = left(n,i);
        cout<<m<<endl;
        temp = abc(trip,i);
        cout<<temp<<endl;
//        delete [] temp;
    }
}
char *abc(const char *str,int n)
{
    if(n<0)
      n=0;
    char *p = new char[n+1];   //分配一个新的空间,还要在主函数里面
    for(int i=0;i<n&&str[i];i++)
        p[i] = str[i];
    while(i<=n)
    {
        p[i]='\0'; //把空域的部分
        i++;
    }
    return p;
}
unsigned long left(unsigned long num,unsigned ct)
{
    int di=1;                              
    unsigned long n;
    n = num;
    while(n/=10)                          //计算数字符的个数
        di++;
    if(di>ct)
    {
        ct=di-ct;
        while(ct--)
            num/=10;
        return num;
    }
    else
        return num;
}


上面是一个完整运行正常的程序,但是我现在想联系一下多态性,结果我把那个指针函数也变成char  *left(const char *str,int n),咋就运行不正常了呢!看运行结果好象c++就没有多态性,识别不了。


那位大哥大姐帮忙解释一下,小弟不胜感激!!!!!
8 回复
#2
mfkpgfsbihc2007-12-15 20:13
这叫多态吗!
#3
独狐箭2007-12-15 21:58
哈哈,多态性简单来说就是函数名字相同,但在运行的时候根据参数的不同而执行不同的函数
#4
aipb20072007-12-15 22:42
楼上说的叫 函数重载,也可以看成多态的一类。

多态分编译时多态,和运行时多态,c++里编译时多态包扩“函数重载”,“模板”“泛型”。
而运行时多态指“通过虚拟机制去调用函数”。
#5
StarWing832007-12-16 05:16
LS,求教,请问模板和泛型有什么区别?
#6
aipb20072007-12-16 10:40
回复 7# 的帖子
通过模板实现泛型编程,即将不同的类型应用到同一段代码实现,提高了代码的重用性,节省了资源。

可以认为泛型就是用模板,不过我觉得还是要区分开,因为泛型是一种思想,而模板是实现这种思想的一个技术。

薄见。
#7
中学者2007-12-16 12:16
LS说得好啊~~~~~
#8
xiangz90252007-12-16 23:41
小弟,听到各位大师的讲解,真是茅塞顿开啊!是啊!刚刚看了书,是自己把多态性理解错了!!!
#9
StarWing832007-12-19 01:43
回复 8# 的帖子
谢谢回答,受教了~~
1