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

关于派生中的访问声明

Susurrant 发布于 2013-05-24 17:10, 1018 次点击
假设为私有继承
我在很多地方都看到“访问声明不能改变类成员原来在基类中的成员性质,只能把原基类的保护成员调整为派生类的保护成员,原基类的公有成员调整为派生类的公有成员。”
但是明明在子类的public里可以对父类的protected成员使用访问声明啊?
也就是把父类的protected成员通过访问声明在子类中变为public
程序代码:
#include<iostream>
using namespace std;

class A
{
protected:
    int a;
public:
    A(int p):a(p){}
};

class B : private A
{
public:
    using A::a;   //访问声明,a在父类中为protected,私有继承
public:
    B(int p):A(p){}
};

int main()
{
    B C(1);
    cout << C.a << endl;
    return 0;
}


以上代码正常运行!!!
怎么回事??
7 回复
#2
ch1379544472013-05-24 17:21
私有继承关键字是private。protected是保护继承,作用域是父类和他的子类
#3
rjsp2013-05-25 09:57
从哪里听来的?
我从来没听说过有这种限定,以防万一,我特意浏览了一下『ISO/IEC 14882:2003(E)』中『The using declaration』相关的内容,也没有发现有这种限定。(当然,查找时一目十行可能有遗漏,但漏掉的几率不大)
#4
Susurrant2013-05-26 12:29
回复 3楼 rjsp
在网上搜索这一句话时有不少资料(ppt,笔记等)里有这句话,老师的教材里也是。
只有本站会员才能查看附件,请 登录

@rjsp
#5
ch1379544472013-05-27 08:57
回复 3楼 rjsp
面向对象编程的基础,你理解了三个关键字各自的作用域,这个就很简单
#6
Susurrant2013-05-27 15:42
回复 5楼 ch137954447
不是不理解三个作用域,而是那句话和我实际编的函数有出入
#7
子楠2013-05-27 16:42
可以呀,a继承过来就是派生类的私有成员,派生类的成员及函数可以调用啊
#8
ch1379544472013-05-28 09:18
回复 6楼 Susurrant
你的using声明把a在B里的权限从private更改成了public,
1