c++子类访问父类私有成员
#include<iostream>#include<string>usingnamespacestd;classShape{public:virtualstringSh...
#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 展开
#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 展开
5个回答
展开全部
一般好的项目,代码风格,设置成private的成员变量,不应该直接访问它的,最好为Circle::r写个成员函数,就可以间接访问了。比如
int Circle::Getr()
{
return r
}
另外,如果你非要不该父类的情况下访问,也是可以的,比如用类的成员指针,具体使用不好理解,风格不好。
int Circle::Getr()
{
return r
}
另外,如果你非要不该父类的情况下访问,也是可以的,比如用类的成员指针,具体使用不好理解,风格不好。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-06-22
展开全部
先把所有 int area() 成员函数都改成 double area()。复用 area 函数。
double volume(){return 3.14*r*r*h;}
改为:
double volume()
{
return ( Circle::area() * h );
}
double volume(){return 3.14*r*r*h;}
改为:
double volume()
{
return ( Circle::area() * h );
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
circle中提供int getR(){return r;}; public 的(protected也可以但一般public)
然后double volume(){return 3.14*getR()*getR()*h;}//
然后double volume(){return 3.14*getR()*getR()*h;}//
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
访问父类私有成员 能不能用友元函数 friend
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
写个成员函数获取啊 添加进父类
int getradio(){return r;}
int getradio(){return r;}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询