| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 959 人关注过本帖
标题:一个关于派生类的问题,大家看一下
只看楼主 加入收藏
Jewgle
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2005-10-12
收藏
 问题点数:0 回复次数:4 
一个关于派生类的问题,大家看一下
写了个程序,派生类对象不能访问派生类数据成员????
const double Pi=3.141593;
#include<iostream.h>
#include<afx.h>
#include<math.h>
class Shape
{public:
int X_axis;
int Y_axis;
Shape(int axis1,int axis2)
{
X_axis=axis1;
Y_axis=axis2;
}
};
class Circle:public Shape
{//public:
int m_nRadii;
public:
Circle::Circle(int axis,int axis1,int axis2):Shape(axis1,axis2)
{
m_nRadii=axis;
}
double Area(int abscissa,int ordinate,int radii);
};
double Circle::Area(int abscissa,int ordinate,int radii)
{
double area=Pi*radii*radii;
return area;
}
class Square:public Shape
{//public:
int m_sXaxis;
int m_sYaxis;
public:
Square::Square(int axis1,int axis2,int axis3,int axis4):Shape(axis3,axis4)
{
m_sXaxis=axis1;
m_sYaxis=axis2;
}
double Area(int axis1,int axis2,int axis3,int axis4);
};
double Square::Area(int axis1,int axis2,int axis3,int axis4)
{
int length,width;
length=2*(axis3-axis1);
width=2*(axis4-axis2);
double area=fabs(length)*fabs(width);
return area;
}
void main()
{
Circle circle(2,3,5);
Square square(2,3,1,5);
double area1=circle.Area(circle.X_axis,circle.Y_axis,circle.m_nRadii);
cout<<"圆面积AREA="<<area1<<endl;
double area2=square.Area(square.m_sXaxis,square.m_sYaxis,square.X_axis,square.Y_axis);
cout<<"长方形面积AREA="<<area2<<endl;
}
其中,square,circle分别为基类Shape的派生类Square,Circle的对象,但调用函数circle.Area 和square.Area 时,
错误提示为
cannot access private member declared in class 'Circle';
cannot access private member declared in class 'Square';
cannot access private member declared in class 'Square'
把m_nRadii,m_sXaxis,m_sYaxis三个改为"protected"型的也是同样的问题,只有是public型的才可以...
难道派生类对象不能访问其自身派生类的私有或保护型数据成员???
有谁帮我解释一下!!!
搜索更多相关主题的帖子: int 派生类 axis Shape public 
2005-12-02 11:38
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
派生类不能访问父类的私有数据成员,但保护型数据成员还是可以访问的(它就是为派生类存在的)。其它类就更不可能了。

[此贴子已经被作者于2005-12-2 14:30:09编辑过]


=×&D o I p R e E n C g T l X&×=
2005-12-02 14:23
lisypro
Rank: 4
等 级:业余侠客
威 望:3
帖 子:695
专家分:216
注 册:2005-9-25
收藏
得分:0 
  • 在类的private:节中声明的成员(无论数据成员或是成员函数)仅仅能被类的成员函数和友元访问。
  • 在类的protected: 节中声明的成员(无论数据成员或是成员函数)仅仅能被类的成员函数,友元以及子类的成员函数和友元访问。
  • 在类的public:节中声明的成员(无论数据成员或是成员函数)能被任何人访问。
    为了使派生类在将来基类改变时不受影响。

    派生类无法访问基类的私有成员。这样在对基类私有成员作任何改变时,就有效地锁定了派生类。

长期承接管理系统
代做各种vb/ / vc小程序
QQ:82341763
手机:13623290828
群号 11619730
2005-12-02 14:57
Jewgle
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2005-10-12
收藏
得分:0 
晕晕的。。。
“派生类不能访问基类的私有成员”,你们说的我都懂(除了那个“友元”还暂时不知道什么东东外)
但我问的是类Shape派生出来的类Circle,类Circle的对象circle能不能访问Circle的数据成员?就是:
class Circle:public Shape
{//public:
int m_nRadii;
public:
Circle::Circle(int axis,int axis1,int axis2):Shape(axis1,axis2)
{
m_nRadii=axis;
}
double Area(int abscissa,int ordinate,int radii);
};
在main()中定义:Circle circle;
然后来一句circle.m_nRadii行不行???
2005-12-03 14:53
Jewgle
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2005-10-12
收藏
得分:0 

哦!不行,闹明白了~~~,呵呵
只能通过派生类的成员函数来访问,
但像上面这个程序,我不想把那几个数据成员声明为public型,而是private型的
要访问他们(函数Area中),有没有什么好方法呢???

2005-12-03 15:31
快速回复:一个关于派生类的问题,大家看一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021175 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved