只能用子类对象对其基类对象赋值,而不能用基类对象对其子类对象赋值,理由是显然的,因为基类对象不包含派生类的成员,无法对派生类的成员赋值。同理,同一基类的不同派生类对象之间也不能赋值。 2) 派生类对象可以替代基类对象向基类对象的引用进行赋值或初始化 A a1;//定义基类A对象a1B b1;//定义公用派生类B对象b...
在面向对象编程(OOP)中,基类与派生类之间的转换是一个常见的操作。基类与派生类之间的转换允许我们在不同层次的类之间进行数据和方法的共享和重用。C++提供了多种方式来实现基类与派生类之间的转换,包括隐式转换、显式转换和强制转换。本文将深入探讨C++中基类与派生类转换的规则、优缺点和使用场景,并通过实例演示如...
①为什么派生类可以转换为基类:派生类从基类而来,因此派生类中包含了基类的方法和成员。此时基类可以通过指针或引用指向派生类(相当于将派生类从基类中继承的那部分方法和成员绑定到基类上了,相当于派生类被截断了),然后基类就可以将派生类假装是一个基类对象来使用(调用其中的成员/方法) ②为什么基类不能转换为派生...
//e1 = reinterpret_cast<Employee>(m2); // 私有或保护继承的时候,派生类对象无法强制转化为基类对象。 pm =static_cast<Manager *>(pe);// 基类指针可以强制转化为派生类指针,但是不安全 //m1 = reinterpret_cast<Manager>e1; // 基类对象无法强制转化为派生类对象 return0; } 五、基类到派生类的转换 ...
派生类到基类的转换: 1.将派生类型的对象传给希望接收基类引用的函数。 看起来是在传递对象,实际上实参是对该对象的引用,对象本身并未复制。并且转换不会在任何方面改变派生类对象,该对象仍是派生类对象。 2.将派生类型的对象传给希望接受基类对象(并非引用)的函数时,情况完全不同,在这种情况下,形参的类型是固定...
基类指针或引用与派生类对象的转换 如果一个基类指针或引用指向一个派生类对象,可以通过强制类型转换将其转换为派生类类型的指针或引用。 #include <iostream>using namespace std;class Base {public:virtual void func() {cout << "Base::func()" << endl;}};class Derived : public Base {public:void fun...
在公用继承、私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员。因此,公用派生类具有基类的全部功能,所有基类能够实现的功能, 公用派...
现在我们来改进一下第7章的程序:同原型的函数在类外写成虚函数。 #include <iostream> using namespace std; class Base1 { public: virtual void display() const; //虚函数 }; void Base1::display() const { cout << "Base1::display()" << endl; } class Base2 : public Base1 { public: vi...
准确来说应该是派生类指针或引用可以隐式转换为基类指针或引用,反过来不成立 class A{};class B : public A{};A& a1 = B();//隐式转换 A* a2 = new B();//隐式转换 B& b = A();//编译错误 B* b = new A();//编译错误 ...
C++基类与派生类的转换 在公用继承、私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员。因此,公用派生类具有基类的全部功能,所有基类...