| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
雷速体育发帖软件开发QQ118000023C语言培训|一对一辅导|零基础学编程LightningChart 快速先进的.Net图表控件
共有 173 人关注过本帖
标题:派生类向基类转换的可访问性问题。
只看楼主 收藏
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:188
专家分:30
注 册:2014-10-9
结帖率:89.47%
  问题点数:0  回复次数:1   
派生类向基类转换的可访问性问题。
程序代码:
#include <iostream>

using namespace std;

class A
{

public:
    void print(int)
    {
        cout << "haha" << endl;

    }
};

class B : protected A
{
public:
    void print(int, int)
    {
        cout << "fuck" << endl;
    }
    void likeit(A &a);
    friend void damnit(A &a);
};

void damnit(A &a)
{
    cout << "0_0" << endl;
}

int main()
{

    B b;
   
    damnit(b);
    b.likeit(b);

   

    system("pause");
    return 0;
}


程序如上:运行结果错误,但是C++ primer P544 又有如下片段,按照->指向的那一条应该允许访问才对,请问是我理解哪里有误吗?

附件: 您没有浏览附件的权限,请 登录注册
2018-04-08 23:03
Jonny0201
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:13
帖 子:283
专家分:1277
注 册:2016-11-7
  得分:0 
我终于都快看到这个部分了, 话说楼主看的真快, 你上次提问的时候, 速度还是和我差不多的
根据我的理解
程序代码:
class Shit {
    public:
        Shit() = default;
};
class Fuck : protected Shit {
    public:
        Fuck() {
            Shit *damnIt = new Shit();
        }
};
int main(int argc, char *argv[]) {
   
}

因为上述代码是可以通过编译的
也就是说这种保护继承的转换确实是存在的, 书上并没有错
只不过这种继承转换只能发生在类内, 而类外是不能发生的, 因为 Shit 中的方法在 Fuck 中是受到保护的, 在外界不能访问, 所以在外界进行转换是报错的
而 private 继承类内也是不能转换, 所以直接报错
话说你这满嘴跑粗口是跟轮子哥学的吧
2018-04-17 19:16







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

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