enum BREED
{
Golden,Teddy,ChineseField
};
class Mammal
{
public:
Mammal(){}
Mammal(int newAge, int newWeight) :age(newAge), weight(newWeight)
{
cout << "Mammal Constructor!" << endl;
}
~Mammal()
{
cout << "Mammal Destructor!" << endl;
}
int getAge()
{
return age;
}
void setAge(int newAge)
{
age = newAge;
}
int getWeight()
{
return weight;
}
void setWeight(int newWeight)
{
weight = newWeight;
}
void speak() const
{
cout << "Mammal speak!" << endl;
}
void sleep() const
{
cout << "Mammal sleep!" << endl;
}
protected:
int age;
int weight;
};
class Dog:public Mammal
{
public:
Dog():Mammal(3,15),breed(ChineseField)
{
cout << "Dog Constructor!" << endl;
}
~Dog()
{
cout << "Dog Constructor!" << endl;
}
BREED getBreed()
{
return breed;
}
void setBreed(BREED newBreed)
{
breed = newBreed;
}
void wagTail()
{
cout << "Tail wagging..." << endl;
}
void begForFood()
{
cout << "Begging for food!" << endl;
}
private:
BREED breed;
};
int _tmain(int argc, _TCHAR* argv[])
{
Dog dog;
dog.speak();
dog.wagTail();
cout << "Age:" << dog.getAge() << endl;
cout << "Weight:" << dog.getWeight() << endl;
}
输出:
Mammal Constructor!
Dog Constructor!
Mammal speak!
Tail wagging...
Age:3
Weight:15
Dog Constructor!
Mammal Destructor!
请按任意键继续. . .
1.注意构造析构函数调用顺序
2.子类构造时,会初始化父类的不带参的默认构造函数,如果父类构造函数是带参的,子类需显式初始化父类构造函数