c++子类访问父类私有成员

#include <iostream>
#include <string>
using namespace std;
class Shape{
public:
virtual string Shapename(){
return "Shape";
}
virtual int area()=0;
virtual double volume()=0;
};
class Point:public Shape{
public:
Point(){}
Point(int x,int y){
this->x=x;
this->y=y;
}
string Shapename(){return "Point";}
int area(){return 0;}
double volume(){return 0;}
private:
int x;
int y;
};
class Circle:public Point{
public:
Circle(){}
Circle(int _r,int x,int y):Point(x,y){
r=_r;
}
string Shapename(){return "Circle";}
int area(){return 3.14*r*r;}
double volume (){return 0;}
private:
int r;

};
class Cylinder:public Circle{
public:
Cylinder(){}
Cylinder(int _h,int x,int y,int r):Circle(x,y,r){
h=_h;
}
string Shpaename(){return "Cylinder";}
int area(){return 0;}
double volume(){return 3.14*r*r*h;}//在这里报错,无法访问父类私有成员,那要怎么办,java里有super,c++这里要怎么办

private:
int h;

};

不要告诉我设置成public

第1个回答  2012-06-22
一般好的项目,代码风格,设置成private的成员变量,不应该直接访问它的,最好为Circle::r写个成员函数,就可以间接访问了。比如
int Circle::Getr()
{
return r
}

另外,如果你非要不该父类的情况下访问,也是可以的,比如用类的成员指针,具体使用不好理解,风格不好。
第2个回答  2012-06-22
先把所有 int area() 成员函数都改成 double area()。复用 area 函数。

double volume(){return 3.14*r*r*h;}
改为:
double volume()
{
return ( Circle::area() * h );
}
第3个回答  推荐于2018-04-12
circle中提供int getR(){return r;}; public 的(protected也可以但一般public)
然后double volume(){return 3.14*getR()*getR()*h;}//本回答被提问者和网友采纳
第4个回答  2012-06-22
访问父类私有成员 能不能用友元函数 friend
第5个回答  2012-06-22
写个成员函数获取啊 添加进父类
int getradio(){return r;}

c++子类访问父类私有成员
一般好的项目,代码风格,设置成private的成员变量,不应该直接访问它的,最好为Circle::r写个成员函数,就可以间接访问了。比如 int Circle::Getr(){ return r } 另外,如果你非要不该父类的情况下访问,也是可以的,比如用类的成员指针,具体使用不好理解,风格不好。

C++ 子类怎么访问父类私有数据?
私有的秘密parent、son都不能访问,只有friend才能访问。在父类前声明子类,在父类中将子类作为友元类 class son;class parent{friend class son;\/* ... *\/};class son: public parent{\/* ... *\/};

C++中的using关键字
C++中的using关键字在编程中扮演着重要角色,它有多种实用用法。首先,using namespace 是最常见的用法,通过它,C++的命名空间可以统一命名空间内的各种函数、变量和类名,方便访问。其次,在继承关系中,using 可以让子类访问父类的private成员。如在类B中,通过using A::v;,子类B可以直接使用父类A...

C++类的访问修饰符public、protected 和 private
对于protected成员,子类可以访问,但不允许修改,这是因为保护成员是为了让子类继承父类的功能,同时允许子类对特定部分进行自定义。公共成员则允许外部和内部自由访问,但通常只用于对外提供服务,隐藏了实现细节。为了允许外部访问私有成员,可以采用友元函数的机制。友元函数可以访问类的私有和受保护成员,但...

c++中,子类继承父类,父类中的私有成员,在子类中是隐藏了,还是没有不...
class Parent { private:int x, y;};class Child: public Parent { };int main(){ cout<<sizeof(Child)<<endl;return 0;} 输出结果是8。 如果Child不继承自Parent,输出结果是1。表明:父类中的私有成员被继承但是隐藏了。P.S. 仅在一种编译器下运行过,不知道其他编译器的结果如何。

c++中,public继承,如何在子类中使用 private 成员,不是说private不能被...
C++中成员变量有三个限定级别:private,protected,public。private只能是在自身类中能调用,例如:sub是一个继承父类father的子类,sub类中定义的函数是不能直接访问father类中的私有成员的。如果想要访问,就要把父类中的成员用protected限定。protected限定符声明的变量,就是允许继承的子类可以直接访问。

C++中子类继承的父类的私有属性在子类中还是私有吗?
是私有的;四个;六个;最后的两句不知道你说什么 关于继承的东西百度上很容易找到,或者你也可以看书,你还可以通过自己动手试验一下。

C++派生类中,如何用子类的成员变量访问父类得成员变量?
你是想问怎样通过子类的对象访问父类的成员变量吧。如果父类的成员变量是public或protected类型的,且派生类是共有或保护继承的,可直接用派生类的对象加点运算符调用父类的成员变量。如:man.i;用指针的话就是 pMan->i;且这个值可直接输出:int a;a=man.i;或a=pMan->i;...

C++公有继承,子类访问父类成员问题
可以在C中通过get访问父类x。只是你的示例代码有好几个语法错误。class A{protected:int x;public:void set(int i){x = i;}int get(){\/\/ 返回值类型为intreturn x;}};class B: public A{int y;};\/\/要加分号class C: protected B{public:void set(int x){B::set(x);}int get()...

c++中,子类可以重写父类的私有成员函数吗?那静态高数又如何重写呢_百度...
ans 1: 不可以;ans 2: 如果你说的是类的静态成员函数的话,不能,因为类的静态成员函数依赖类独立存在,不依赖对象;如果是全局的话,也不能;因为那不叫重写,叫重载

相似回答