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