#include <iostream>
using namespace std;
class Fish
{
public:
void swim()
{
cout<<"Fish swim..."<<endl;
}
};
class Tuna : public Fish
{
public:
void swim()
{
cout<<"Tuna swim..."<<endl;
}
};
void makeFishSwim(Fish &fish)
{
fish.swim();
}
//多态测试
int main()
{
Tuna tuna;
//期望结果是调用Tuna的swim()方法
//测试结果显示调用的是基类Fish的swim()方法
makeFishSwim(tuna);
system("pause");
return 0;
}
#include <iostream>
using namespace std;
class Fish
{
public:
virtual void swim()
{
cout<<"Fish swim..."<<endl;
}
};
class Tuna : public Fish
{
public:
virtual void swim()
{
cout<<"Tuna swim..."<<endl;
}
};
class Carp : public Fish
{
public:
//virtual关键字可省略
virtual void swim()
{
cout<<"Carp swim..."<<endl;
}
};
void makeFishSwim(Fish &fish)
{
fish.swim();
}
//虚函数测试
int main()
{
Fish fish;
Tuna tuna;
Carp carp;
//输出:Fish swim...
makeFishSwim(fish);
//输出:Tuna swim...
makeFishSwim(tuna);
//输出:Carp swim...
makeFishSwim(carp);
system("pause");
return 0;
}
#include <iostream>
using namespace std;
class Fish
{
public:
Fish()
{
cout<<"Constructed Fish..."<<endl;
}
~Fish()
{
cout<<"Destroyed Fish"<<endl;
}
};
class Tuna : public Fish
{
public:
Tuna()
{
cout<<"Constructed Tuna..."<<endl;
}
~Tuna()
{
cout<<"Destroyed Tuna"<<endl;
}
};
void deleteFishMemory(Fish *pFish)
{
delete pFish;
}
//虚析构函数测试
int main()
{
//堆上分配空间
Tuna *pTuna = new Tuna();
//delele pTuna时没有调用派生类Tuna的析构函数
deleteFishMemory(pTuna);
//栈上分配空间,
//delele tuna时调用了派生类Tuna的析构函数
Tuna tuna;
system("pause");
return 0;
}
#include <iostream>
using namespace std;
class Fish
{
public:
Fish()
{
cout<<"Constructed Fish..."<<endl;
}
virtual ~Fish()
{
cout<<"Destroyed Fish"<<endl;
}
};
class Tuna : public Fish
{
public:
Tuna()
{
cout<<"Constructed Tuna..."<<endl;
}
~Tuna()
{
cout<<"Destroyed Tuna"<<endl;
}
};
void deleteFishMemory(Fish *pFish)
{
delete pFish;
}
//虚析构函数测试
int main()
{
//堆上分配空间
Tuna *pTuna = new Tuna();
//将Fish的析构函数声明为虚函数后
//delele pTuna时调用了Fish的析构函数也调用了派生类Tuna的析构函数
deleteFishMemory(pTuna);
//栈上分配空间,
//delele tuna时调用了派生类Tuna的析构函数
Tuna tuna;
system("pause");
return 0;
}
#include <iostream>
using namespace std;
//不含有虚函数的类
class C1
{
public:
void func1(){}
};
//含有1个虚函数的类
class C2
{
public:
void func1(){}
virtual void func2(){}
};
//含有2个虚函数的类
class C3
{
public:
void func1(){}
virtual void func2(){}
virtual void func3(){}
};
//含有虚函数的类的大小测试
int main()
{
//1
cout<<"sizeof(C1) : "<<sizeof(C1)<<endl;
//4
cout<<"sizeof(C2) : "<<sizeof(C2)<<endl;
//4
cout<<"sizeof(C3) : "<<sizeof(C3)<<endl;
system("pause");
return 0;
}
#include <iostream>
using namespace std;
class Animal
{
public:
Animal()
{
cout<<"Constructed Animal..."<<endl;
}
int age;
};
class Mammal : public Animal
{
};
class Bird : public Animal
{
};
class Reptile : public Animal
{
};
class Platypus : public Mammal, public Bird, public Reptile
{
public:
Platypus()
{
cout<<"Constructed Platypus..."<<endl;
}
};
//菱形继承存在的问题
int main()
{
Platypus p;
system("pause");
return 0;
}
#include <iostream>
using namespace std;
class Animal
{
public:
Animal()
{
cout<<"Constructed Animal..."<<endl;
}
int age;
};
class Mammal : public virtual Animal
{
};
class Bird : public virtual Animal
{
};
class Reptile : public virtual Animal
{
};
class Platypus : public Mammal, public Bird, public Reptile
{
public:
Platypus()
{
cout<<"Constructed Platypus..."<<endl;
}
};
//使用虚继承来解决菱形继承存在的问题
int main()
{
Platypus p;
system("pause");
return 0;
}
总结: