基类指针指向派生类对象与派生类指针指向基类对象的区别 
时间: 2023-05-04 15:01:11 浏览: 42
基本指针指向派生类对象与派生类指针指向基本类对象的区别在于对象的实际类型和指针所指向的类型不同。基本指针只能够访问基类的成员,而派生指针能够访问派生类和基类的成员。需要注意的是,使用派生指针访问基类成员时需要使用强制类型转换。
相关问题
基类指针指向派生类对象的例子
假设我们有一个基类Animal和两个派生类Dog和Cat:
```c++
class Animal {
public:
virtual void makeSound() {
cout << "Animal sound" << endl;
}
};
class Dog : public Animal {
public:
void makeSound() override {
cout << "Bark" << endl;
}
};
class Cat : public Animal {
public:
void makeSound() override {
cout << "Meow" << endl;
}
};
```
现在,我们可以创建一个指向Dog对象和一个指向Cat对象的基类指针:
```c++
Animal* animal1 = new Dog();
Animal* animal2 = new Cat();
```
这些指针都指向派生类的对象。我们可以调用它们的虚函数`makeSound()`:
```c++
animal1->makeSound(); // 输出 "Bark"
animal2->makeSound(); // 输出 "Meow"
```
由于`makeSound()`是一个虚函数,编译器会在运行时确定要调用哪个版本的函数,即使它们都在基类中定义。这就是多态的概念。在这个例子中,基类指针`animal1`和`animal2`指向的是不同的对象,但它们都可以调用基类中的`makeSound()`函数以及派生类中的重载版本。
基类指针指向派生类,基类和派生类谁的范围更大一些,为什么派生类对象能作为基类对象传实参
基类和派生类的范围是不同的。派生类是基类的扩展,具有基类的所有成员,同时还有自己的成员。因此,派生类的范围更大。
派生类的对象可以作为基类对象传递实参,是因为派生类对象可以被视为基类对象的一种特殊情况。由于派生类包含基类的所有成员,因此派生类对象可以转换为基类对象,而基类对象不具备派生类的特性,因此不能转换为派生类对象。
通过将派生类对象传递给基类对象的引用或指针,可以以基类的方式访问派生类的成员。这种方式称为向上转型。在程序中,向上转型可以实现多态性,使得基类指针或引用在运行时可以指向不同的派生类对象,从而实现了动态绑定。
相关推荐













