如何在 c++ 中通过基类引用访问派生类的对象?
How to access object of a derived class by base class reference in c++?
我会在C++阅读以下行:完整的参考书。我对此没有明确的想法。
References to Derived Types
Similar to the situation as described for pointers earlier, a base class reference can be
used to refer to an object of a derived class. The most common application of this is
found in function parameters. A base class reference parameter can receive objects of
the base class as well as any other type derived from that base.
我对以下代码有疑问:
#include<iostream>
using namespace std;
class base
{
protected:
int i;
public:
void seti(int num){i=num;}
int geti(){return i;}
};
class derived:public base
{
protected:
int j;
public:
void setj(int num){j=num;}
int getj(){return j;}
};
void refe(base &ob)
{
ob.seti(1);
ob.setj(2);
}
int main()
{
derived d;
refe(d);
cout<<d.geti();
cout<<"n"<<d.getj();
return 0;
}
当我编译代码时,它将通过以下错误:
D:Userssrilakshmikanthan.pDocumentssource codeex.cpp||In function 'void refe(base&)':|
D:Userssrilakshmikanthan.pDocumentssource codeex.cpp|28|error: 'class base' has no member named
'setj'
=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 5 second(s)) ===
我也在函数 refe(( ((derived *(ob(.setj(2( 中这样投射; 这也显示了以下错误:
D:Userssrilakshmikanthan.pDocumentssource codeex.cpp||In function 'void refe(base&)':|
D:Userssrilakshmikanthan.pDocumentssource codeex.cpp|28|error: invalid cast from type 'base' to
type 'derived*'
=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 3 second(s)) ===|
所以请在那本书中解释一下这句话。
您只能从基类引用调用派生类的虚函数,请参阅此处,
#include<iostream>
class Base
{
public:
virtual void fun()
{
std::cout<<"Base";
}
};
class Derived:public Base
{
public:
void fun()override
{
std::cout<<"Derived";
}
};
void myfun(Base &ob)
{
ob.fun();
}
int main()
{
Derived ob;
myfun(ob);
return 0;
}
输出:
Derived
Process returned 0 (0x0) execution time : 0.266 s
Press any key to continue.
我也在函数 refe(( ((derived *(ob(.setj(2( 中这样投射;这也显示了以下错误:
投射到((derived &)ob).setj(2);
这将起作用,因为它不是指针,而是引用
相关文章:
- 如何使用单独文件中的派生类访问友元函数对象
- 为什么此派生对象无法访问基类的后递减方法?
- C++:为什么无法在派生类中访问受保护的构造函数?
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 从纯虚拟类 (A) 派生的指针无法访问来自纯类 (B) 的重载方法
- C ++基础私有方法在将自身转换为派生类后可以访问吗?
- 按基类对象访问派生类资源时出错
- 使(虚拟)函数在大多数派生类中无法访问中间基类中可访问,定义良好?
- 从模板化父类中的派生内部类访问受保护的成员变量
- 如何从派生类访问基类中的重载运算符?
- 两个抽象类,派生自同一个基类.如何访问从一个抽象类到另一个抽象类的指针
- C++11: 如何访问派生类中的基类成员?
- 访问派生类的 QMetaObject
- 使用基类对象访问派生的仅类方法
- 如何在 c++ 中通过基类引用访问派生类的对象?
- 派生类无法访问基类的受保护成员
- 如何在 c++ 中使用多态性访问派生类字段?
- 为了访问方法,从基类动态转换为派生类
- C++继承从基类指针访问派生类中的非虚拟函数