怎么来访问一个protected

junsanrao 2008-12-01 10:36:06
#include <stdio.h>
class A
{
protected int x=123;
};
int main(int argc, char *argv[])
{
这里要怎么访问这个X
}
若下面再定义一个类
class B
{
这里面又要怎么样访问x呢
}
...全文
164 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
toadzw 2008-12-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ysuliu 的回复:]
1, 没有办法直接访问,除非类自己提供接口,类似这样:

C/C++ code
class A
{
public:
static int getValue(){return x};

protected:
int x=123;
};

int main(int argc, char *argv[])
{
int tmp = A::getValue();//假设变量x初始化过
}




2, 两种方法:
a, B从A继承,直接就可以访问父类的保护成员

C/C++ code
class B : public A
{
//怎么用都行,跟自己成员一样,但是继…
[/Quote]
up
nullah 2008-12-01
  • 打赏
  • 举报
回复

#include <stdio.h>
class A
{
friend class B;
protected int x=123;
public:
int getX() const;
};
int main(int argc, char *argv[])
{
//这里要怎么访问这个X 通过class A的成员函数
//1.这里可以调用getX()
}
若下面再定义一个类
class B
{
//这里面又要怎么样访问x呢
//2.如class A中所示把B定义为A的友元类 这样就可以访问了 或者3.让B继承A
}


qizhao2001 2008-12-01
  • 打赏
  • 举报
回复
protected成员 可以被
1. 类的成员
2. 类的友元
3. 类的public、protected子类
4. 类的private直接子类
访问
ChamPagneZ 2008-12-01
  • 打赏
  • 举报
回复

#include <stdio.h>
class A
{
protected int x=123;
};
int main(int argc, char *argv[])
{
这里要怎么访问这个X //没有访问能力,因为main不是友元函数
}
若下面再定义一个类
class B //所以,把B定义为A的友元,或者,B继承A,即可访问.
{
这里面又要怎么样访问x呢
}
junsanrao 2008-12-01
  • 打赏
  • 举报
回复
太感激了,本人没玩过C++,谢谢了
ysuliu 2008-12-01
  • 打赏
  • 举报
回复
呵呵,第二个问题没写完呢^_^

第二种方式就是跟第一种一样,让A提供接口,B来用,也就不用继承了~

今天晕死了~

[Quote=引用 2 楼 ysuliu 的回复:]
1, 没有办法直接访问,除非类自己提供接口,类似这样:

C/C++ code
class A
{
public:
static int getValue(){return x};

protected:
int x=123;
};

int main(int argc, char *argv[])
{
int tmp = A::getValue();//假设变量x初始化过
}




2, 两种方法:
a, B从A继承,直接就可以访问父类的保护成员

C/C++ code
class B : public A
{
//怎么用都行,跟自己成员一样,但是继…
[/Quote]
ysuliu 2008-12-01
  • 打赏
  • 举报
回复
当然无论哪种情况,友元都能解决问题,但是不推荐,这破坏了类的封装。

建议LZ再去看看C++基础的书籍,类和继承的部分。
ysuliu 2008-12-01
  • 打赏
  • 举报
回复
1, 没有办法直接访问,除非类自己提供接口,类似这样:

class A
{
public:
static int getValue(){return x};

protected:
int x=123;
};

int main(int argc, char *argv[])
{
int tmp = A::getValue();//假设变量x初始化过
}


2, 两种方法:
a, B从A继承,直接就可以访问父类的保护成员

class B : public A
{
//怎么用都行,跟自己成员一样,但是继承后x的属性,要根据继承方式来定,
//上面我用的public继承,所以这里x仍然是保护的
//所以在类外的访问方式跟第一种是一样的
}


[Quote=引用楼主 junsanrao 的帖子:]
#include <stdio.h>
class A
{
protected int x=123;
};
int main(int argc, char *argv[])
{
这里要怎么访问这个X
}
若下面再定义一个类
class B
{
这里面又要怎么样访问x呢
}
[/Quote]
wzg112 2008-12-01
  • 打赏
  • 举报
回复
第一个:可以在A类中加上一个public函数,在这个函数里操作protected 成员变量
第二个:把B类作为友元放在A类中
candyice 2008-12-01
  • 打赏
  • 举报
回复
#include "windows.h"
#include <iostream>

using namespace std;
#include <stdio.h>
class A{
public:
A()
{
x = 123;
};
int GetValue()
{
return x;
};
protected:
int x;

};
class B:public A{
public:
int GetValue()
{
return x;
};
};
int main()
{
A a;
B b;
cout<<a.GetValue()<<endl;
cout<<b.GetValue()<<endl;
return 0;
}
czp_opensource 2008-12-01
  • 打赏
  • 举报
回复
25 class A
26 {
27 public:
28 A () : i (9527) {}
29 protected:
30 int i;
31 }; 32
33 int main (int argc, char** argv)
34 {
35 A a;
36 int *i = (int*)&a;
37 printf ("%d\n", *i);
38 return 0;
39 }

czp_opensource 2008-12-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ysuliu 的回复:]
1, 没有办法直接访问,除非类自己提供接口,类似这样:
C/C++ code

class A
{
public:
static int getValue(){return x};

protected:
int x=123;
};

int main(int argc, char *argv[])
{
int tmp = A::getValue();//假设变量x初始化过
}

什么时候在static函数可以访问非静态成员了?


2, 两种方法:
a, B从A继承,直接就可以访问父类的保护成员
C/C++ code

class B : public A
{
//怎么用都行,跟自己成员一样,但是继承后x的属性,要根据继承方式…
[/Quote]
iambic 2008-12-01
  • 打赏
  • 举报
回复
用private,或者public。
taifeng123 2008-12-01
  • 打赏
  • 举报
回复
class A
{
public:
int p_x(return x); //在这里提供一个公有的接口。外部函数可以访问。
protected:
int x=5;
};
int main(int argc, char *argv[])
//也可以将main()定义成A类的友元,这样main()就可直接访问protected成员。
{
//
}
若下面再定义一个类
class B:public A
{
//可以直接访问 x //因为派生类的成员函数可以访问父类的protected成员。
}
wjfmail 2008-12-01
  • 打赏
  • 举报
回复
对,用friend 友元 就可以访问了.同意8楼.
yshuise 2008-12-01
  • 打赏
  • 举报
回复
#define protected public
wind00sky 2008-12-01
  • 打赏
  • 举报
回复
UP
jiww03 2008-12-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qizhao2001 的回复:]
protected成员 可以被
1. 类的成员
2. 类的友元
3. 类的public、protected子类
4. 类的private直接子类
访问
[/Quote]
protected访问法则
lsd1025 2008-12-01
  • 打赏
  • 举报
回复
同意一楼!

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧