多态
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 );
}