| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 739 人关注过本帖
标题:基类指针访问派生类普通函数成员
只看楼主 加入收藏
冷读者
Rank: 1
等 级:新手上路
帖 子:19
专家分:5
注 册:2012-10-2
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:10 
基类指针访问派生类普通函数成员
有什么方法可以让用基类定义的指针数组中的指针,分别能够访问多个不同公有派生类中的成员函数。
2013-12-20 00:38
犬虫门心本人
Rank: 2
等 级:论坛游民
帖 子:28
专家分:26
注 册:2013-12-19
收藏
得分:0 
为什么要这样做?如果只是为了纯技巧,而不顾安全性,那我无语。
为什么不用虚函数?
2013-12-20 07:20
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
不懂

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-12-20 08:20
blueskiner
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:227
专家分:707
注 册:2008-9-22
收藏
得分:0 
又一奇葩需求。
2013-12-20 13:31
冷读者
Rank: 1
等 级:新手上路
帖 子:19
专家分:5
注 册:2012-10-2
收藏
得分:0 
回复 2楼 犬虫门心本人
基类中有纯虚函数的,就是用基类的指针指向派生类对象能否访问派生类成员函数
2013-12-21 01:47
冷读者
Rank: 1
等 级:新手上路
帖 子:19
专家分:5
注 册:2012-10-2
收藏
得分:0 
回复 3楼 peach5460
基类指针指向派生类对象,能否用该指针访问派生类成员函数呢?
2013-12-21 01:51
IT男year
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:106
注 册:2013-6-9
收藏
得分:0 
回复 6楼 冷读者
可以呀!把派生类声明为共有继承,再把基类与派生类中函数原型相同的函数声明为虚函数,再进行赋值兼容就好啦!如果要访问新增加的其它成员的话,就得将基类指针进类型强制转换啦!

[ 本帖最后由 IT男year 于 2013-12-21 07:55 编辑 ]
2013-12-21 07:46
IT男year
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:106
注 册:2013-6-9
收藏
得分:20 
回复 6楼 冷读者
#include<iostream>
using namespace std;
class A
{
public:
    A(){}
    virtual void get()
    {
        cout<<"这是类A里的get()函数"<<endl;
    }
};
class B:public A
{
public:
    B(){}
    virtual void get()
    {
        cout<<"这是类B里的get()函数"<<endl;
    }
    void get1()
    {
        cout<<"这是类B里的get1()函数"<<endl;
    }
};
int main()
{
    A p,*p1;
    B T;
    p1=&p;
    p1->get();
    p1=&T;
    p1->get();
    //p1->get1();------>这就是访问派生类中新增加的成员函数,不进行类型转换是不能访问的。
    ((B *)p1)->get1();----->这就是类型转换啦!
    return 0;
}
不懂请看这段示例代码!!!!!
2013-12-21 08:49
IT男year
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:82
专家分:106
注 册:2013-6-9
收藏
得分:0 
回复 6楼 冷读者
#include<iostream>
using namespace std;
class A
{
public:
    A(){}
    virtual void get()
    {
        cout<<"这是类A里的get()函数"<<endl;
    }
};
class B:public A
{
public:
    B(){}
    virtual void get()
    {
        cout<<"这是类B里的get()函数"<<endl;
    }
    void get1()
    {
        cout<<"这是类B里的get1()函数"<<endl;
    }
};
int main()
{
    A p,*p1;
    B T;
    p1=&p;
    p1->get();
    p1=&T;
    p1->get();
    //p1->get1();------>这就是访问派生类中新增加的成员函数,不进行类型转换是不能访问的。
    ((B *)p1)->get1();
    return 0;
}
不懂请看这段示例代码!!!!!
2013-12-21 08:49
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
以下是引用冷读者在2013-12-21 01:51:25的发言:

基类指针指向派生类对象,能否用该指针访问派生类成员函数呢?

这种需求太变态,不予考虑,肯定是设计有问题

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-12-21 16:56
快速回复:基类指针访问派生类普通函数成员
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021778 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved