| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1541 人关注过本帖
标题:private继承的时候,能否再用using来声明基类中的成员?
只看楼主 加入收藏
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
 问题点数:0 回复次数:10 
private继承的时候,能否再用using来声明基类中的成员?
private继承的时候,能否再用using来声明基类中的成员?
搜索更多相关主题的帖子: using private 基类 声明 成员 
2008-04-28 17:22
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
你贴代码吧.一起讨论

学习需要安静。。海盗要重新来过。。
2008-04-28 17:23
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
这个是Effective 中的一段代码
我只是把继承中的public换成了private
class Base{
  private:
    int x;
  public:
    virtual void mf1()=0;
    virtual void mf2(int);
    virtual void mf2();
    void mf3();
    void mf3(double);  
};
class Derived: private Base{
  public:
    using Base::mf1;
    using Base::mf3;
    virtual void mf1();
    void mf3();
    void mf4();
}
这里的using Base::mf1;using Base::mf3;是否还能起到预期的作用
2008-04-28 17:36
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
好像不可以...类型转化错误
#include<iostream>
using namespace std;
class Base{
  private:
    int x;
  public:
    virtual void mf1()=0;
    //virtual void mf2(int);
    //virtual void mf2();
    void mf3();
    void mf3(double);  
};
void Base::mf1()
{
    cout<<"Base"<<endl;
};
class Derived: private Base{
  public:
    using Base::mf1;
    using Base::mf3;
    void mf1();
    void mf3();
    void mf4();
};
void Derived::mf1()
{
  cout<<"Derived"<<endl;
}
int main()
{
   Derived a;
   Base &b=a;
   b.mf1();
   return 0;
}
其实你不用using的话..派生类也是可以看见的

学习需要安静。。海盗要重新来过。。
2008-04-28 18:12
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
如果只是讨论可见,确实是可见的
#include<iostream>
using namespace std;
class Base{
  private:
    int x;
  public:
    virtual void mf1()=0;
    //virtual void mf2(int);
    virtual void mf2();
    void mf3();
    void mf3(double);  
};
void Base::mf2()
{
    cout<<"Base"<<endl;
};
class Derived: private Base{
  public:
    using Base::mf1;
    using Base::mf2;
    void mf1();
    void mf3();
    void mf4();
};
void Derived::mf1()
{
  cout<<"Derived"<<endl;
  mf2();
};
int main()
{
   Derived a;
   a.mf1();
   return 0;
}

学习需要安静。。海盗要重新来过。。
2008-04-28 18:26
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
这个东西就是在绕逻辑....像java里面的接口默认公有..一般实现多态都需要公有继承..和虚函数公有...看一点基础的书..高级得太困难...呵呵,一起进步...

[[it] 本帖最后由 sunkaidong 于 2008-4-28 18:56 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-04-28 18:37
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
[bo]以下是引用 [un]newyj[/un] 在 2008-4-28 17:36 的发言:[/bo]

这个是Effective 中的一段代码
我只是把继承中的public换成了private
class Base{
  private:
    int x;
  public:
    virtual void mf1()=0;
    virtual void mf2(int);
    virtual void mf2();
    void mf3() ...

完全没效果嘛,你派生类已经存在这些接口了///

樱花大战,  有爱.
2008-04-28 20:26
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
除非你派生类的接口没有定义,这样就相当于多次声明了/

樱花大战,  有爱.
2008-04-28 20:27
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
我错了,,,有点繁琐,不讨论了/

樱花大战,  有爱.
2008-04-28 20:32
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
收藏
得分:0 
谢谢楼上两位的回答
using Base::mf1;是声明基类中mf3()和mf3(double)这两个函数吗?
是告诉 派生类 只要是基类中函数名为mf3的都可以调用吗
2008-04-28 20:39
快速回复:private继承的时候,能否再用using来声明基类中的成员?
数据加载中...
 
   



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

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