程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 動態調用-C++純虛函數問題請指教

動態調用-C++純虛函數問題請指教

編輯:編程解疑
C++純虛函數問題請指教

#include
#include
using namespace std;

class Toy {
public:
virtual void talk() const=0;
};

class Dog: public Toy {
// Write your code here
public:
void talk()
{
cout<<"Wow"<<endl;
}
};

class Cat: public Toy {
// Write your code here
public:
void talk()
{
cout<<"Meow"<<endl;
}
};

class ToyFactory {
public:
/**
* @param type a string
* @return Get object of the type
/
Toy
getToy(string& type) {
// Write your code here
if(type=="Dog")
{
Dog d;
return d;
}
if(type=="Cat")
{
Cat *c;
return c;
}
}
};
int main()
{
string type;
type="Dog";
ToyFactory
tf = new ToyFactory();
Toy* toy = tf->getToy(type);
toy->talk();
return 0;
}

最佳回答:


上代碼。

 #include <iostream>
 #include <string>
 #include <memory>



using namespace std;
class Toy {
public:
    virtual void talk() const = 0;
};
class Dog : public Toy {
    // Write your code here
public:
    void talk() const { cout << "Wow" << endl; }
};
class Cat : public Toy {
    // Write your code here
public:
    void talk() const { cout << "Meow" << endl; }
};
class ToyFactory {
public:
    /**
    * @param type a string
    * @return Get object of the type
    */
    unique_ptr<Toy> getToy(string &type) {
        // Write your code here
        if (type == "Dog") {
            return unique_ptr<Dog>(new Dog);
        }
        if (type == "Cat") {
            return unique_ptr<Cat>(new Cat);
        }
    }
};
int main() {
    string type;
    type                = "Dog";
    ToyFactory *    tf  = new ToyFactory();
    unique_ptr<Toy> toy = tf->getToy(type);
    toy->talk();
    return 0;
}

主要是以下問題:
1,Dog/Cat類型talk方法的簽名和Toy的talk方法簽名不一致,Toy的簽名是void talk() const,注意const
2,getToy方法不應該返回Toy類型,因為Toy是一個不能實例化的抽象類。返回Toy類型的指針,應當return new Dog;return new Cat;,窩這裡使用了unique_ptr,不用在意。
3,ToyFactory tf = new ToyFactory應該是ToyFactory *tf,注意new 返回的是指針。

u014327136
u014559880
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved