基类访问派生类
Ⅰ 基类对象可以直接访问派生类成员吗
开发语言
C++中派生类对基类成员的三种访问规则
冬雪如春
原创
关注
2点赞·4286人阅读
C++中派生类对基类成员的访问形式有两种:
1.内部访问:派生类新增成员对从基类继承过来成员进行访问
2.对象访问:在派生类外部,通过派生类对象对从基类继承过来的成员进行访问
下面看看派生类对基类的成员的访问规则:
1.派生类私有继承了基类规则(private)
当类的继承方式是私有继承(private)时,基类中的public和protected成员被继承后称为派生类的私有成员,派生类的成员可以直接访问他们,但是在类的外部,通过派生类的对象是不可以对其进行访问的。还有基类中的私有成员在派生类中是不可以直接访问的,无论是派生类的成员还是派生类的对象都无法访问基类中的私有成员。但可以通过基类提供的public 函数对其进行间接的访问。
2.派生类保护继承了基类规则:(protected)
当类的继承方式是保护继承(protected)时,基类中的public和protected成员被继承后称为派生类的保护成员,派生类的成员可以直接访问他们,但是在类的外部,通过派生类的对象是不可以对其进行访问的。还有基类中的私有成员在派生类中是不可以直接访问的,无论是派生类的成员还是派生类的对象都无法访问基类中的私有成员。但可以通过基类提供的public 函数对其进行间接的访问。
3.派生类公有继承了基类规则:(public)
当类的继承方式是公有继承(public)时,基类中的public和protected成员被继承后称为派生类的公有成员和保护成员,派生类的成员可以直接访问他们,但是在类的外部,通过派生类的对象只能进行访问继承过来的public成员。还有基类中的私有成员在派生类中是不可以直接访问的,无论是派生类的成员还是派生类的对象都无法访问基类中的私有成员。但可以通过基类提供的public 函数对其进行间接的访问。
Ⅱ C++的基类如何访问其派生类的成员变量
C++中派生类对基类成员的访问形式主要有以下两种:
1、内部访问:由派生类中新增成员对基类继承来的成员的访问。
2、对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。
三种继承方式下,派生类对基类成员的访问规则。
1、私有继承的访问规则
Ⅲ c#中基类如何访问派生类的对象
将派生类在父类里面声明为友元类就可以访问
否则无法访问
可参考以下代码
// 以下代码在VC2008下测试通过
#include <iostream>
using namespace std;
class TT;
class Base
{
public:
Base(int d) : data(d)
{
}
private:
int data;
friend class TT;
};
class TT : public Base
{
public:
TT(int d) : Base(d)
{
}
int getData() const { return data; }
};
void main(void)
{
TT t(3);
cout << t.getData() << endl;
cin.get();
}
Ⅳ c#中基类如何访问派生类的对象
不是所有基类对象都能访问派生类的成员派生类对象可以赋值给基类变量, 这样的基类变量才可以访问派生类成员方法是:派生类 p = new 派生类(); //生成派生类对象 基类b = p; //把派生类赋值给基类派生类 o = b as 派生类(); //使用o访问派生类成员
Ⅳ 关于基类对派生类的访问
5 7 -858993460
2 4 -858993460
5 7 8
8请按任意键继续. . .
仔细分析你的输出:
tb.pp(tb); //初始化
ta.display() // 因为你ta没有初始化z,所以输出是随机的
tb.display() // 初始化了,没错。
其实你没有注意到你的派生类中也有个z不是吗?
你换成其它名字看看?
Ⅵ c++里基类的指针, 能访问派生类的成员变量吗
360问答
指向派生类的基类指针可不可以调用派生类成员函数?
军8786050 LV12
2017-01-18
如果可以,怎么访问,如果不可以有什么解决办法?
满意答案
liqi26zc
LV6
2017-01-19
可以,只要那个派生类成员函数是基类的成员函数的一个重写版本
以C++为例,假如有
class Runnable {
virtual void run();
};
class myclass : Runnable {
virtual void run() { throw runtime_error("unimplemented"); }
};
并且有
myclass o;
Runnable* p = &o;
那么 p->run() 就调用了派生类的 run 函数