在谭浩强老师关于继承和派生里面,有这样一段对派生类成员的访问属性论断!
"基类成员函数只能访问基类成员,而不能访问派生类的成员",这句话不对吧?我想,如果派生类成员为public属性,也不能被基类的成员函数访问么?
谢谢你!我一直认为,public 定义的数据成员和普通变量类似,因为只要在对象的作用域内,public成员变量都是可以引用的!其实书上说的没有将清楚,应该这样讲,基类的成员函数不能直接引用派生类的数据成员,因为基类的数据成员和派生类的数据成员this指针不一样。这是一点,另外一点,就像你说的,即使提前声明,但是C++规定要求有前置声明是不能定义实体对象的,只能引用对象的指针或者引用!
追答然后?可以采纳我的答案么?谢谢了
但是派生类的数据成员为public呢?按照pulic的定义,也可以被类的作用域内的其他函数引用
追答即使是子类的公有数据成员也不能直接作为基类的对象成员.
追问提前声明都不行么?
追答给你个参考网页自己看吧
参考资料:http://zhidao.baidu.com/question/497773170.html
追问谢谢你!我一直认为,public 定义的数据成员和普通变量类似,因为只要在对象的作用域内,public成员变量都是可以引用的!其实书上说的没有将清楚,应该这样讲,基类的成员函数不能直接引用派生类的数据成员,因为基类的数据成员和派生类的数据成员this指针不一样。这是一点,另外一点,如上面的回答者所说,即使提前声明,但是C++规定要求有前置声明是不能定义实体对象的,只能引用对象的指针或者引用!
追答√
对于C++中说基类成员函数只能访问基类成员,而不能访问派生类的成员...
首先,派生类的新成员不在基类的作用域内,那么如果基类想要访问派生类的新添加成员就必须只能是派生类对象的成员(情况1)或者派生类的静态数据成员(情况2)。其次,基类的定义必定是在派生类前面的,那么,基类要想使用派生类的新添加成员,必须对派生类作前置声明。而又因为仅有前置声明是不能定义实体...
在公有继承的情况下,基类成员在派生类中的访问权限保持不变? c++
C++在公有继承的情况下,基类的public和protected成员的访问属性在派生类中不变,而基类的private成员不可访问。其他外部使用者只能通过派生类的对象访问继承的public成员。另外,追加点分再采纳吧,亲。。
C++中,虚基类是如何避免两义性的?
所以虚基类是有性能开销的。基类的成员函数在派生类中不占存储,成员函数只有一个副本。实际上对于普通继承来说,组合和继承是差不多的。所以有人就建议优先使用组合。
C++的基类和派生类构造函数
基类与派生类的构造函数在C++中有所不同,基类的成员函数可以被继承,但构造函数不能。构造函数是为了初始化派生类的成员变量,但在基类中有private属性的成员变量在派生类中无法访问。因此,派生类的构造函数需要调用基类的构造函数来完成初始化工作。以下是一个示例,展示如何在派生类构造函数中调用基类构...
C++基类和派生类的关系
由于派生类具有所有基类的成员,所以把派生类的对赋给基类对象是合理的,不过要求这种继承方式必须是public方式。但是,反过来赋值会使基类中一具有派生类的成员(因为派生类的成员通常是比基类的成员多),所以这是不允许的。2. 基类指针指向派生类对象 因为派生类对象也是基类对象,所以指向派生类对象的...
C++类的公有继承,基类的私有成员在派生类中不可见或不可访问,这个不可...
在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。方式如下:公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式。1. 公有继承(public)公有继承的特点是基类的公有成员和保护成员作为...
C++中,基类能引用派生类的成员函数吗?能引用派生类的对象吗?
如果基类中声明的参数相同的同名虚函数,就能引用;否则不能。基类中不能直接引用派生类的对象,同楼上的,可以把派生类当作基类来使用。
派生类的对象对基类中的什么成员是可以访问的?
基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类的成员还是通过派生类的对象,都无法直接访问从基类继承来的private成员,但是可以通过基类提供的public成员函数间接访问。2、公有继承的访问规则 当类的继承方式为公有继承时,基类的public成员和protected成员被继承到派生类中仍作为派生类...
C++中基类的友元函数是否可以被派生类继承
友元函数是不可以继承的,也就是说基类A的友元函数,并不能被继承到其派生类B中,也就是说A的友元函数不能访问B中自己所增加的成员(但是请注意,是不能访问B中新增加的成员,但是还可以访问B中的基类的成员的)。 普通类的友元函数,可以访问类的所有成员: #include <iostream> class A{ friend void printElement...
C++:在一个派生类的成员函数中调用基类成员函数“void f()”但无法...
本题说的是无法通过编译器,说明是编译期错误,不是运行期错误。基类的私有成员对派生类是不可见的,就是无法调用void f(),A中写了void f()后,是运行期错误。而C是编译期错误。 求分。第二个问题, 你说的对,但是本题是无法通过编译,那么显然不是你说的这种情况。