Home >Backend Development >C++ >Detailed explanation of C++ function inheritance: How to use 'base class pointer' and 'derived class pointer' in inheritance?
In function inheritance, use "base class pointer" and "derived class pointer" to understand the inheritance mechanism: when the base class pointer points to the derived class object, upward transformation is performed and only the base class members are accessed. When a derived class pointer points to a base class object, a downward cast is performed (unsafe) and must be used with caution.
In object-oriented programming, inheritance is an important Concept that allows derived classes to inherit the properties and methods of a base class. When it comes to function inheritance, "base class pointer" and "derived class pointer" play a vital role in understanding the inheritance mechanism.
This situation occurs when the derived class object pointer is assigned to the base class pointer. The compiler performs an operation called an "upcast" in which specific properties and methods of the derived class are "hidden", leaving only the base class members.
class Base { public: void print() { cout << "Base class" << endl; } }; class Derived : public Base { public: void print() { cout << "Derived class" << endl; } }; int main() { Derived d; Base* b = &d; // 上向转型 b->print(); // 输出: Base class return 0; }
In the above example, we assign the address of the derived class Derived
object to the base class pointer b
. When b->print()
is called, it calls the print()
method of the base class Base
, not the print( )
method because b
is a pointer to type Base
.
This situation is uncommon, but it is possible. This happens when a base class object pointer is assigned to a derived class pointer. The compiler performs an operation called a "downcast" to make specific properties and methods of the derived class available again.
class Base { public: void print() { cout << "Base class" << endl; } }; class Derived : public Base { public: void print() { cout << "Derived class" << endl; } void derivedMethod() { cout << "Derived method" << endl; } }; int main() { Base b; Derived* d = reinterpret_cast<Derived*>(&b); // 下向转型(不安全!) d->print(); // 输出: Base class d->derivedMethod(); // 编译错误:无法访问派生类方法 return 0; }
In the above example, we used an unsafe downward cast to assign the address of the base class Base
object to the derived class pointer d
. When d->print()
is called, it calls the print()
method of the base class Base
because d
points to Object of type Base
. However, we cannot call derivedMethod()
of the derived class because the compiler cannot guarantee that d
points to a derived class object.
Upcasting is usually safe because the base class contains all the public members of the derived class. However, downcasting is unsafe because it relies on the programmer to ensure that the derived class pointer actually points to the derived class object. It is strongly recommended to use the "dynamic_cast" operator to perform safety checks before using downcasting.
When understanding function inheritance, it is very important to understand "base class pointer" and "derived class pointer". These concepts allow us to use inheritance in a flexible way while minimizing errors.
The above is the detailed content of Detailed explanation of C++ function inheritance: How to use 'base class pointer' and 'derived class pointer' in inheritance?. For more information, please follow other related articles on the PHP Chinese website!