#include<iostream>
using namespace std;
const double PI = 3.1415926;
class cpoint
{
public:
cpoint(double a, double b)
{
x = a;
y = b;
}
double area()
{
return 0;
}
private:
double x, y;
};
class ccircle :public cpoint
{
public:
ccircle(double a, double b, double c) :cpoint(a, b)
{
r = c;
}
double area()
{
return PI * r * r;
}
private:
double r;
};
class cractangle :public cpoint
{
public:
cractangle(double a, double b, double c, double d) :cpoint(a, b)
{
w = c;
h = d;
}
private:
double w, h;
};
void funcarea(cpoint& p)
{
cout << "area = " << p.area() << endl;
}
int main()
{
ccircle cobj(5.5, 6.6, 10);
funcarea(cobj);
cractangle cobjs(3, 4, 5, 6);
funcarea(cobjs);
return 0;
}
输出结果均为0.
基类cpoint加上virtual
自定义写一个:
class Animal
{
public:
virtual void callfunc();//虚函数
private:
string name;
};
void Animal::callfunc()
{
cout << "我不会叫" << endl;
}
class cat :public Animal
{
public:
cat(int _age, string _name)
{
age = _age;
name = _name;
}
void callfunc()
{
cout << name << "猫叫" << endl;
}
private:
string name;
int age;
};
class dog :public Animal
{
public:
dog(int _age, string _name)
{
name = _name;
age = _age;
}
void callfunc()
{
cout << name << "狗叫" << endl;
}
private:
string name;
int age;
};
void callfunc(Animal* p)//传递不同的对象实参,可以调用对应的成员函数,实现多态功能
{
p->callfunc();
}
int main()
{
cat a(18, "大猫");
cat a1(1, "小猫");
dog b(18, "傻狗");
callfunc(&a);
callfunc(&b);
return 0;
}
抽象类
**纯虚函数:**不能初始化定义。
virtual void callfunc() = 0;