| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1312 人关注过本帖
标题:派生类向基类转换的可访问性问题。
只看楼主 加入收藏
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
结帖率:90.24%
收藏
 问题点数: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 又有如下片段,按照->指向的那一条应该允许访问才对,请问是我理解哪里有误吗?

图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 派生类 转换 访问 void int 
2018-04-08 23:03
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册: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.017899 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved