c嘎嘎作业实验八 虚函数与多态

这篇博客分析了一个C++程序,涉及虚函数和多态的概念。程序创建了抽象基类Shape,以及派生的二维和三维图形类,如矩形、圆形、椭圆、球体、圆柱体和圆锥体。每个类都实现了相应的面积、周长或体积计算方法。博主探讨了如何使用dynamic_cast进行类型转换,以计算图形数组的总面积、总周长和总体积,展示了C++中动态类型和多态的应用。
摘要由CSDN通过智能技术生成
  1. 分析并调试下列程序,写出程序输出结果,并解释原因。
    https://paste.ubuntu.com/p/ChnGPx4qGr/
//
// Created by Christina Liu on 2020/11/11.
//

#include <iostream>

using namespace std;



class B
{
   
public:
	virtual void f1()
	{
   
		cout << "B:f1()" << endl;
	}
	virtual void f2()
	{
   
		cout << "B:f2()" << endl;
	}
	void f4()
	{
   
		cout << "B:f4()" << endl;
	}
	void g()
	{
   
		cout << "B:g()" << endl;
		f1();
		f2();
;    }
};

class D :public B
{
   
public:
	void f1()
	{
   
		cout << "D:f1()" << endl;
	}

	virtual void f3()
	{
   
		cout << "D:f3()" << endl;
	}
	void f4()
	{
   
		cout << "D:f4()" << endl;
	}
	void g()
	{
   
		cout << "D:g()" << endl;
		f1();
		f2();
	}
};
int main()
{
   
	D d;
	D* pd = &d;
	B* pb = &d;
	B b = d;
	cout<<"b.f1(); b的实例对象调用f1-----》为b类内的f1"<<endl;
	b.f1();
	cout<<"b.f2(); b的实例对象调用f2-----》为b内的f2"<<endl;
	b.f2();
	cout<<"b.g(); "<<endl;
	b.g();
	cout<<"pb->f1(); pb是一个声明为b类型的指针 实际上指向的对象是b的子类d 因为B内的f1为virtual类型 调用函数的时候 前面有一个this 经过查表 即调用的是指针指向的真正的对象 而不是声明的对象"<<endl;
	pb->f1();
	cout<<"pb->f2(); 因为D内没有重写父类的f2虚函数 所以调用的是父类B的f2"<<endl;
	pb->f2();
	cout<<"pb->g(); 普通类型的函数g 在g函数内调用了f1 和 f2 因为f1是virtual 所以调用是真实对像的函数【如果真实对象有这个函数  无论是不是virtual类型"<<endl;
	pb-<
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值