标题:小白求助,多态和虚拟函数部分问题
只看楼主
星星章、
Rank: 1
等 级:新手上路
帖 子:5
专家分:7
注 册:2020-5-21
结帖率:100%
已结贴  问题点数:3 回复次数:5 
小白求助,多态和虚拟函数部分问题
补充代码,设计三个复读机类和一个普通函数,具体要求如下:
复读机类( Repeater )
它有一个成员函数 Play,在这里它什么也不做。它还有一个析构函数,它被调用时会输出一行   砰!。
正向复读机类( ForRepeater )
继承 Repeater 类并重写 Play 函数,输出没想到你也是一个复读机且在析构函数中输出    正·复读机 炸了。
反向复读机类( RevRepeater )
继承 Repeater 类也重写 Play 函数,输出机读复个一是也你到想没且在析构函数中输出   机读复·反 炸了。
普通函数:Repeater* CreateRepeater(int type),函数根据 type 的值,动态创建不同的复读机对象,并返回它的指针。其中当type = 0,创建 ForRepeater 对象;type = 1,创建 RevRepeater 对象;其他则返回 0。


#include <iostream>
using namespace std;

class Repeater
{
    //复读机基类的声明
  
};
//复读机基类的定义


class ForRepeater : public Repeater
{
    //正向复读机的声明
   
 
};
//正向复读机的定义


class RevRepeater : public Repeater
{
    //反向复读机的声明
   
 
};
//反向复读机的定义


//普通函数
Repeater* CreateRepeater(int type)
{
    //根据type创建指定的复读机
   
  
   
}

/********* End *********/

//main函数不允许修改
int main()
{
    int i;
    cin >> i;
    Repeater *ptr = CreateRepeater(i);
    ptr->Play();
    delete ptr;
}






我是这样写的 #include <iostream>
using namespace std;

/********* Begin *********/
class Repeater
{
    //复读机基类的声明
     public:
   virtual void Play()=0;
   virtual ~ Repeater()
   {   cout << "砰!" << endl; }
   
   
};
//复读机基类的定义

class ForRepeater : public Repeater
{
    //正向复读机的声明
        public:
    void Play() override;  

    ForRepeater ();
    ~ForRepeater ();
   
};
//正向复读机的定义

 void ForRepeater ::Play()
 {cout<<"没想到你也是一个复读机" <<endl;}

ForRepeater ::~ForRepeater()
{cout<<"正·复读机 炸了"<<endl;}


class RevRepeater : public Repeater
{
    //反向复读机的声明
     public:
       void Play() override;  
 
    RevRepeater ();
    ~RevRepeater ();
};
//反向复读机的定义
 void RevRepeater ::Play()
 {cout<<"机读复个一是也你到想没" <<endl;}

RevRepeater ::~RevRepeater()
{cout<<"机读复·反 炸了"<<endl;}


//普通函数
Repeater* CreateRepeater(int type)
{
    //根据type创建指定的复读机
   Repeater *p;
    if(type==0)
    { p=new ForRepeater;
     return p;}
    else if(type==1)
    {  p=new RevRepeater;
     return   p; }
     else return 0;

}   


int main()
{
    int i;
    cin >> i;
    Repeater *ptr = CreateRepeater(i);
    ptr->Play();
    delete ptr;
}




我刚学没多久,不太会。感谢帮助 鞠躬!!!
搜索更多相关主题的帖子: 函数 public Repeater int type 
2020-05-21 14:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
你遇到什么问题,你想问什么?
2020-05-21 16:58
星星章、
Rank: 1
等 级:新手上路
帖 子:5
专家分:7
注 册:2020-5-21
得分:0 
回复 2楼 rjsp
谢谢!!第一次提问没有经验

我的问题是我不知道如何实现 这一步
“普通函数:Repeater* CreateRepeater(int type),
函数根据 type 的值,动态创建不同的复读机对象,并返回它的指针。
其中当type = 0,创建 ForRepeater 对象;type = 1,创建 RevRepeater 对象;其他则返回 0。”

我不知道如何 动态创建不同的复读机对象,并返回它的指针。




2020-05-21 21:36
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:3 
回复 3楼 星星章、
可是,你写出来了呀
程序代码:
Repeater* CreateRepeater(int type)
{
    //根据type创建指定的复读机
   Repeater *p;
    if(type==0)
    { p=new ForRepeater;
     return p;}
    else if(type==1)
    {  p=new RevRepeater;
     return   p; }
     else return 0;

}

2020-05-21 21:50
星星章、
Rank: 1
等 级:新手上路
帖 子:5
专家分:7
注 册:2020-5-21
得分:0 
回复 4楼 rjsp
啊! 谢谢大佬!问题解决了。 我后面的没问题,编译没报错,运行有报错,unresolved external symbol...  
我查到了,是因为没有定义构造函数。 好开心,感谢!
2020-05-21 22:25
星星章、
Rank: 1
等 级:新手上路
帖 子:5
专家分:7
注 册:2020-5-21
得分:0 
通常,链接器错误通常意味着忘记了实现一个函数,或者未能链接到正确的库。这些通常是首先要寻找的东西。 Get 到了!
2020-05-21 22:28



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501711-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.183960 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved