父类的指针指向子类c++
时间: 2024-05-20 09:08:36 浏览: 20
在C++中,父类的指针可以指向子类的对象。这是因为子类继承了父类的所有成员,包括数据成员和成员函数,因此子类的对象在内存中布局与父类的对象相同。
下面是一个简单的例子,展示了如何使用父类的指针指向子类的对象:
```
class Parent {
public:
void foo() {
cout << "Parent::foo()" << endl;
}
};
class Child : public Parent {
public:
void foo() {
cout << "Child::foo()" << endl;
}
};
int main() {
Child child;
Parent* parentPtr = &child; // 父类指针指向子类对象
parentPtr->foo(); // 调用的是子类中的 foo() 函数
return 0;
}
```
在上面的例子中,我们定义了一个 Parent 类和一个 Child 类,Child 类继承自 Parent 类。我们创建了一个 Child 类的对象 child,并使用一个 Parent 类的指针 parentPtr 指向该对象。我们调用 parentPtr->foo() 时,实际上会调用 Child 类中重载了 Parent 类中的 foo() 函数。
相关问题
C++中。父类指针指向子类与子类指针指向父类有什么区别?
父类指针指向子类对象和子类指针指向父类对象在C++中有以下区别:
1. 父类指针指向子类对象:
- 在继承关系下,父类的指针可以直接指向子类对象,无需进行强制类型转换。
- 通过父类指针调用的成员函数将会调用子类中的同名函数(如果存在),实现了多态性。
- 父类指针无法访问子类中新增的成员函数和成员变量。
2. 子类指针指向父类对象:
- 在继承关系下,子类的指针不能直接指向父类对象,会导致编译错误。
- 子类指针只能访问父类中的成员函数和成员变量,无法访问子类中新增的成员函数和成员变量。
- 如果通过子类指针调用的成员函数在父类中被重写,将会调用父类中的同名函数,而不是子类中的函数。
总结起来,父类指针指向子类对象可以实现多态性,而子类指针指向父类对象则无法实现多态性,并且存在类型不匹配的问题。
c++ 父类指针和子类指针
在C++中,可以使用父类指针和子类指针来实现多态性。多态性是面向对象编程中的一个重要概念,它允许我们使用一个父类指针指向一个派生类对象,从而可以通过该指针调用派生类对象的成员函数。
假设有一个基类 `Base` 和两个派生类 `Derived1` 和 `Derived2`,可以通过以下方式使用父类指针和子类指针:
1. 父类指针指向派生类对象:
```
Base* ptr = new Derived1(); // 使用父类指针指向 Derived1 对象
// 或者
Base* ptr = new Derived2(); // 使用父类指针指向 Derived2 对象
```
2. 子类指针也可以直接指向派生类对象:
```
Derived1* ptr = new Derived1(); // 使用子类指针指向 Derived1 对象
// 或者
Derived2* ptr = new Derived2(); // 使用子类指针指向 Derived2 对象
```
通过使用父类指针,可以实现对派生类对象的访问和操作。然而,需要注意的是,父类指针只能访问到派生类对象中属于父类的成员和方法,而无法直接访问派生类特有的成员和方法。若需要访问派生类特有的成员和方法,则需要进行类型转换。
希望以上解答能够帮助到你!如果对此还有疑问,请继续提问。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)