本帖最后由 zds212 于 2021-5-7 22:31 编辑
[C++] 纯文本查看 复制代码 #include<iostream>
using namespace std;
class dongwu
{
public:
void js()
{
cout << "动物叫声" << endl;
}
int a;
};
class xiong:virtual public dongwu
{
public:
void js()
{
cout << "熊叫声" << endl;
}
};
class mao:virtual public dongwu
{
public:
void js()
{
cout << "猫叫声" << endl;
}
};
class xiongmao :public xiong, public mao
{
public:
void js()
{
cout << "熊猫叫声" << endl;
}
};
void test()
{
xiongmao xm;
//xm.a = 10;//"xiongmao::a"不明确
xm.a = 10;//派生类xiong和mao类加上继承基类的虚函数关键字virtual就可以实现
cout << xm.a << endl;
}
int main()
{
test();
system("pause");
return 0;
}
上面是菱形类的处理
----------------------------------------------------------------------
下面是类的多态。
[C++] 纯文本查看 复制代码 #include<iostream>
using namespace std;
class dw
{
public:
virtual void a()
{
cout << "我是动物" << endl;
}
};
class yang:public dw
{
public:
void a()
{
cout << "我是羊" << endl;
}
};
class tuo
{
public:
void a()
{
cout << "我是驼" << endl;
}
};
class caonima:public yang,public tuo
{
public:
void a()
{
cout << "我是草泥马" << endl;
}
};
void test01(dw &dwv)//dw &dwv =cnm;
{
dwv.a();//因为动物类a函数加了虚函数关键字virtual 所以这里输出是结果是草泥马。没有的话会是动物类
}
void test02()
{
caonima cnm;
test01(cnm);
}
int main()
{
test02();
system("pause");
return 0;
} |