首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

继承概念的疑问解决方法

2012-02-21 
继承概念的疑问当类的的继承方式为公有继承时,基类的公有和保护成员的访问属性在派生类中不变,而基类的私

继承概念的疑问
当类的的继承方式为公有继承时,基类的公有和保护成员的访问属性在派生类中不变,而基类的私有成员不可访问,即基类的公有成员和保护成员被继承到派生类中仍作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。其他外部使用者只能通过派生类的对象访问继承来的公有成员,而无论是派生类的成员还是派生类的对象都无法访问基类的私有成员。
-------------------------
//Begin   of   rectangle.h
class   point
{
public:
void   initp(float   xx=0,float   yy=0){x=xx;y=yy;}
void   move{float   xoff,float   yoff}{x+=x0ff;y+=yoff;}
float   getx(){return   x;}
float   gety(){return   y;}
private:
float   x,y;                                                                                           //私有数据成员
};
class   rectangle:public   point                                                 派生类声明部分
{
public:                                                                         //新增公有函数成员
void   initr(float   x,float   y,float   w,float   h)
{initp(x,y);W=w,H=h;}                                     //调用基类公有成员函数
float   getH(){return   H;}
float   getW(){return   W;}
private:                                           //新增私有数据成员
float   W,H;
};

//Begin   of   7.cpp
#include <iostream.h>
#include <math.h>
#include <rectangle.h>
void   main()
{
rectangle   rect;
rect.initr(2,3,20,10);
rect.move(3,2);
cout < < "the   date   of   rect(x,y,w,h): " < <endl;
cout < <rect.getx() < < ", ";
cout < <rect.gety() < < ", ";
cout < <rect.getW() < < ", ";
cout < <rect.getH() < < ", ";
-----------------
根据上面的定义:
  而基类的私有成员不可访问,即基类的公有成员和保护成员被继承到派生类中仍作为派生类的公有成员和保护成员....而无论是派生类的成员还是派生类的对象都无法访问基类的私有成员。
rect.initr(2,3,20,10);                  
cout < <rect.getx() < < ", ";
cout < <rect.gety() < < ", ";
rect.move(3,2);              

这几个不都是派生类的成员么?怎么又能够访问基类的私有成员X,Y呢?

择自:相关文档:郑莉,董渊C++第二版式197页



[解决办法]
move(),getx()和gety()是基类成员函数啊
initr()是通过调用基类的公有函数initp()而访问x和y的
楼主没看清楚吧

[解决办法]
再次建议你早换C++ primer
[解决办法]
再次建议你早换C++ primer
============
good idea!!
[解决办法]
也不一定要什么特别的书
语言学通了其实是差不多的
[解决办法]
楼主看看继承结构, 继承后对象内部的结构 ......

可以看看 Incide C++ object model
------解决方案--------------------


http://www.sf.org.cn/Article/base/200703/20106.html
[解决办法]
我觉得继承应该也属于从基内中调用函数吧
包括派生类对基内函数的重载也应该是在基内函数上修改的吧
继承下来的不属于派生内 只是通过一种方式对基内函数的修改调用 只有在派生内建立的才属于派生内吧

这个是自己的想法 不晓得正确不!!!!!!!!!

[解决办法]
class base
{
public:
int test;
private:
int num;
};

class drived:public base
{
public:
//int set_num(int i){num = 10;} //禁止访问
int set_test(int i){test = 10;} //OK
//int get_num(){return num;}
int get_test(){return test;}
};
[解决办法]

int set_num(int i){num = i;}
int get_num(){return num;}

放在基类中,和放在派生类中,
其意义和过程是不一样的 ~
[解决办法]
建议看下书 这样记滴牢点
C++ primer就不错 可以看下

热点排行