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

派生类向基类转换的可访问性问题。

S140131022 发布于 2018-04-08 23:03, 1491 次点击
程序代码:
#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 又有如下片段,按照->指向的那一条应该允许访问才对,请问是我理解哪里有误吗?

只有本站会员才能查看附件,请 登录
1 回复
#2
Jonny02012018-04-17 19:16
我终于都快看到这个部分了, 话说楼主看的真快, 你上次提问的时候, 速度还是和我差不多的
根据我的理解
程序代码:
class Shit {
    public:
        Shit() = default;
};
class Fuck : protected Shit {
    public:
        Fuck() {
            Shit *damnIt = new Shit();
        }
};
int main(int argc, char *argv[]) {
   
}

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