C++语言程序设计第四版-郑莉课后题-第八章-多态性-编程部分

8-4 请编写一个计数器 Counter类,对其重载运算符“+”。

#include<iostream>
#include<string.h>
using namespace std;

class Counter{
	unsigned short value;
	public:
	Counter(unsigned short v=0):value(v){	}
    unsigned short getvalue()const{	return value;	}
    void setvalue(unsigned short v){value=v;}
	Counter operator +(const Counter &c){
		Counter t;
		t.value=value+c.value;
		return t;
	} 
};

int main(){
 Counter c1(8);
 Counter c2(9);
 Counter c3=c1+c2;
 cout<<c3.getvalue();
	return 0;
}

8-5 编写一个哺乳动物类 Mammal,再由此派生出狗类 Dog,二者都声明 speak()成员函数,该函数在基类中被声明为虚函数。声明一个 Dog 类的对象,通过此对象调用speak 函数,观察运行结果。

#include<iostream>
#include<string.h>
using namespace std;

class Mammal{
	public:
	Mammal(){cout<<"Mammal 构造"<<endl;}
	~Mammal(){cout<<"Mammal 析构"<<endl;}
	virtual	void speak(){cout<<"mammal speak"<<endl	;	}
};

class dog:public Mammal{
	public:
		dog(){cout<<"dog 构造"<<endl;}
	   ~dog(){cout<<"dog 析构"<<endl;}
		void speak(){cout<<"dog speak"<<endl;		}
};
int main(){
 Mammal *p=new dog;
 p->speak();
 delete p;
	return 0;
}

dog d;

d.speak();

这时候dog对象d 调用speak()没有二义性问题,有没有virtual都是一样的dogspeak

dog d;
 Mammal*p=&a

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值