多态
l 多态 :当子类和基类存在同形函数(返回值相同,函数名相同,形参相同),此时若将基类对象作为函数形参则会存在调用混淆(无论传递的实参是子类对象还是基类对象都会只调用基类的成员函数),为了解决这种问题C++ 引入了多态,多态就是让程序能在运行时能自动根据实参类型自动确认调用哪个函数的能力。
l 示例
class A
{
public:
void fun(int x)
{
a=x;
cout<<a+1<<endl;
}
private:
int a;
};
class B: public A
{
public:
void fun(int y)
{
b=y;
cout<<b<<endl;
}
Private:
int b;
};
void f(A &s)
{
s.fun();
}
void main()
{
A a;
f(a);
B b;
F(b);
}
l 本课题目
定义一个字符串类 str ,其基本属性是字符串首地址,功能函数如下,录入字符串,返回字符串首地址,输出字符串,取小写字母并构成串,在此基础上定义一个派生类S , S 类能取大小字母并构成串,要求用多态解决本课题目。
#include<iostream >
using namespace std ;
class str // 基类
{
public :
str ()
{
…… //动态开辟空间
}
~ str ()
{
…… // 释放堆空间
}
char * getch ()
{
…… // 返回字符串首地址
}
void ss()
{
cout << "请输入字符串! " << endl ;
}
void input () // 输入一个字符串以‘# ’结束输入
{
ss();
……
}
void print () //输出字符串
{
……
}
void choice ( char * k ) //取小写字母并连成串
{
……
}
private :
char * p ;
};
class S : public str
{
public :
S ()
{
…… //动态开辟空间
}
~ S ()
{
…… // 释放堆空间
}
void input ()// 输入一个字符串以‘# ’结束输入
{
ss();
……
}
void print () //输出字符串
{
……
}
char * getch ()// 返回字符串首地址
{
……
}
void choice ( char * r )// 取大写字母并练成串
{
……
}
private :
char * k ;
};
void f ( str & a )
{
a . input ();
a . choice ( a . getch ());
a . print ();
}
void main ()
{
str st;
S s ;
f ( st );
f ( s );
}
本文通过实例讲解C++中多态的概念与应用,演示如何在基类与派生类间实现函数重写,以达到运行时动态确定调用哪个版本的目的。通过具体的字符串类与派生类的创建,展示多态在实际编程中的使用。
375

被折叠的 条评论
为什么被折叠?



