C++中基类和派生类之间的转换实例教程
什么是基类和派生类呢?
在C++中,基类和派生类是面向对象编程中的两个基本概念。基类通常是一个抽象的概念,它定义了一些通用的特征,在派生类中被继承和扩展。派生类则是从基类派生出来的类,它继承了基类的特性,并在此基础上增加了一些自己的特性。
转换示例
我们来看一个实际的示例,假设现在我们有一个基类People,和一个派生类Student,如下所示:
class People
{
public:
People(string name, int age) : m_name(name), m_age(age) {}
virtual ~People() {}
virtual void display() { cout << "name: " << m_name << ", age: " << m_age << endl; }
private:
string m_name;
int m_age;
};
class Student : public People
{
public:
Student(string name, int age, float score) : People(name, age), m_score(score) {}
~Student() {}
void display() { cout << "name: " << m_name << ", age: " << m_age << ", score: " << m_score << endl; }
private:
float m_score;
};
在这个例子中,People类是基类,Student类是派生类,Student类继承了People类的所有属性和方法。
接下来我们对派生类Student进行类型转换。
例一:向上转型
向上转型是将子类对象转换为父类指针或引用的过程。在这个过程中,子类的特性将会被隐藏,只有父类的特性是可见的。
void test_upcasting()
{
Student stu("Tom", 18, 90.5f);
// 向上转型,将Student类对象转换为People类指针
People* pPeople = &stu;
// 调用People类display()方法
pPeople->display();
}
在此例中,我们首先创建了一个Student类的对象stu,接下来使用&stu获取stu的地址,再将该地址赋值给指向基类People的指针pPeople。最后,调用pPeople的display()方法,即可看到输出结果为:name: Tom, age: 18。
例二:向下转型
向下转型通常是将一个父类指针或引用转换为子类指针或引用的过程。在这个过程中,指针或引用指向的是派生类的对象,因而可以访问这个派生类对象的所有成员。
void test_downcasting()
{
People* pPeople = new Student("Tom", 18, 90.5f);
// 执行向下转型
Student* pStudent = dynamic_cast<Student*>(pPeople);
// 调用Student类display()方法
pStudent->display();
delete pPeople;
}
在这个例子中,我们首先创建了一个People类指针,将其指向一个Student类对象。接下来,使用dynamic_cast对pPeople进行了向下转型,将其转换成指向Student类的指针pStudent,并进行输出。可以看到,输出结果为:name: Tom, age: 18, score: 90.5。
需要注意的是,在进行向下转型时,必须使用dynamic_cast进行类型转换。因为如果指针本身不指向派生类对象,而指向了其他类型的对象,直接用静态转换,就会发生不可预知的错误。所以,最好使用dynamic_cast,如果失败则会返回NULL,从而避免了程序崩溃的风险。
总结
本文介绍了C++中基类和派生类之间的转换,并给出了两个实际的示例。通过这些示例,我们可以更加深入地理解基类和派生类之间的关系,掌握如何实现它们之间的转换。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中基类和派生类之间的转换实例教程 - Python技术站