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

tzungshianli 发布于 2014-11-17 17:18, 531 次点击
Class P
{
public:
int v1;
protected:
int v2;
private:
int v3;
};
class C:public P
{
public:
void f1(){v1=0;}//⑴
void f2(){v1=v2=v3=0;}//⑵
protected:
void f3(){v1=v2=0;}//⑶
private:
void f4(){v1=v2=v3=0;}//⑷
};
int main()
{
return 0;
}
⑴⑵⑶⑷行哪些無法通過編譯。
這題我完全沒有思緒,請大家指點迷津一下
謝謝

[ 本帖最后由 tzungshianli 于 2014-11-17 17:19 编辑 ]
8 回复
#2
wp2319572014-11-18 10:52
实际上机测试一下ok
#3
wp2319572014-11-18 10:56
w5.cpp(18): error C2248: “P::v3”: 无法访问 private 成员(在“P”类中声明)
1>          w5.cpp(12) : 参见“P::v3”的声明
1>          w5.cpp(6) : 参见“P”的声明
1>w5.cpp(22): error C2248: “P::v3”: 无法访问 private 成员(在“P”类中声明)
1>          w5.cpp(12) : 参见“P::v3”的声明
1>          w5.cpp(6) : 参见“P”的声明
#4
stop12042014-11-19 04:01
不能这样写哦..两个类不能直接访问对方的成员.(因为你这个类是未创建的....不懂就算吧-.- 看下面)
我给你写个例子.
程序代码:

#include <iostream>
using namespace std;
class a
{
public:
    int v1 = 5;
};
class b
{
public:
    void show(a CLASS)          //意思是传入类型 a  //CLASS是形参
    {
        cout << CLASS.v1;   //因为CLASS是类型a       这个就相当于a.v1了
    }
};
int main()
{
    b s1;
    a s2;
    s1.show(s2);        //s2是类型a   传入s1 即 b类
    return 0;
}




[ 本帖最后由 stop1204 于 2014-11-19 04:03 编辑 ]
#5
tzungshianli2014-11-19 11:52
這個是講義上的題目,我想題目就是故意寫不對的程式讓我們找出不對在哪裡。
我用相片的方式呈現。
只有本站会员才能查看附件,请 登录
#6
天使梦魔2014-11-19 14:40
3楼已给解,v3是基础类的私有成员,任何派生成员都无法访问被派生的私有成员.这个逻辑很简单.
无论是派生出来的是声明成共有或者私有都无法访问.
如果派生可调用一切被继承者私有成员,那类里面的共有,私有,保护,friend就完全失去意义了
#7
tzungshianli2014-11-19 19:57
謝謝樓上,我了解了
#8
麻麻说我不乖2014-11-19 20:37
只要基类把成员设定是private,不管派生类是公有继承还是保护继承还是私有继承,都不能访问基类私有成员,除非通过调用基类里public 的成员函数来访问基类的private成员。
#9
tzungshianli2014-11-20 09:30
謝謝大家的解答
1