当前位置:首页 » 文件传输 » 基类的对象可以访问派生类成员
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

基类的对象可以访问派生类成员

发布时间: 2022-10-09 01:06:36

Ⅰ C++中基类指针指向派生类对象可以调用派生类的新增成员么

NO!基类指针告诉编译器它的静态类型是基类这种类型,所以限定了这个指针只能调用基类的自有成员。这个其实无关于他指向什么类型对象。
但是,你作为这个指针的写作者,你当然知道这个基类指针指向的是派生类对象。所以,可以将这个基类指针强制转换为派生类指针(就是强制编译器把这个指针静态类型看作派生类型),静态类型表明了一个对象 能执行的所有动作(成员函数)+它的自有属性(数据成员),这样派生类的新增成员就可以被这个指针调用了
动态绑定的重写基类的virtual方法并不是派生类新增成员,而是重写(override)。

Ⅱ c++中基类能用派生类中的成员吗

不能。
派生类可以使用基类的,但基类无法访问派生类中的成员数据或成员函数。因为基类不可能知道它的派生类有哪些成员数据或函数。

Ⅲ C++的基类如何访问其派生类的成员变量

C++中派生类对基类成员的访问形式主要有以下两种:
1、内部访问:由派生类中新增成员对基类继承来的成员的访问。
2、对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。

三种继承方式下,派生类对基类成员的访问规则。

1、私有继承的访问规则

Ⅳ 对于C++中说基类成员函数只能访问基类成员,而不能访问派生类的成员,有疑问

首先,派生类的新成员不在基类的作用域内,那么如果基类想要访问派生类的新添加成员就必须只能是派生类对象的成员(情况1)或者派生类的静态数据成员(情况2)。

其次,基类的定义必定是在派生类前面的,那么,基类要想使用派生类的新添加成员,必须对派生类作前置声明。而又因为仅有前置声明是不能定义实体对象的,所以情况1是不可能的。情况2基本同理。

情况1:
class B;//前置声明
B b;//这里会出错,因为编译器此时还不能获取到B的定义,根本无法创建B类的实体对象
class A
{
public:
void f()
{
cout << b.y;//试图访问派生类对象的成员
}

};

class B : public A
{
public:
static int x;
int y;
};

情况2:

class B;//前置声明
class A
{
public:
void f()
{
cout << B::x;//试图访问派生类的静态成员。这里会出错,因为编译器此时还不能获取到B::x的定义
}

};

class B : public A
{
public:
static int x;
int y;
};

Ⅳ 基类对象可以引用派生类对象吗

要看你怎么引用,在绝大部分情况下不可以,因为基类不知道派生类是什么。但是通过virtual函数引用还是可以的

Ⅵ 基类的成员能够访问派生类的什么成员

不能!只有派生类访问基类的部分成员,例如:马作为基类,白马作为派生类。基类:马,不一定有“白”的特性,但是:白马,一定有‘马’的特性。

Ⅶ c#中基类如何访问派生类的对象

不是所有基类对象都能访问派生类的成员派生类对象可以赋值给基类变量, 这样的基类变量才可以访问派生类成员方法是:派生类 p = new 派生类(); //生成派生类对象 基类b = p; //把派生类赋值给基类派生类 o = b as 派生类(); //使用o访问派生类成员

Ⅷ C++中基类的对象可以作为派生类的成员吗

可以,基类本身也是一个类,类的对象当然可以作为另类的成员。 并没有因为有父子区别而无法进行,支只不过调用时,子类成员调用用一个点,你调用里面的类对象成员用两个点罢了。
如a.c
a.b.c
b是a的成员,b自己还有一个成员c。
这两个成员是不一样的,分别是子类的c和父类的c,呵呵