Im OOP編程新技術,C++和Im目前正在學習設計模式。如何將Java接口代碼移植到C++抽象基類中?
只需抓住Head First Design Patterns書籍即可學習。它其實很棒,而且我已經掌握了基本概念。第一章談論編程到接口而不是實現。不幸的是,對我來說,這些例子使用java。
下面是使用「接口」的書中的java代碼示例,我明白這不能直接在C++中移植。我試圖實現C++的抽象基類。但是Im特別在動態設置QuackBehavior時丟失了。
C++虛擬函數定義可以動態嗎?有人可以告訴我如何以最佳方式將此Java代碼移植到C++中嗎?我需要這個來確保即時通訊在學習面向對象的正確軌道上。謝謝!
//FlyBehavior.java
public interface FlyBehavior{
public void fly(); //the interface that all flying behavior classes implement
}
public class FlyWithWings implements FlyBehavior {
public void fly(){
System.out.println("Im flying!"); //flying behavior implementation for ducks that do fly
}
}
//QuackBehavior.java
public interface QuackBehavior{
public void quack();
}
public class Quack implements QuackBehavior {
public void quack() {
System.out.println("Quack");
}
}
public class Squeak implements QuackBehavior {
public void quack() {
System.out.println("Squeak");
}
}
public class MuteQuack implements QuackBehavior {
public void quack() {
System.out.println("<<SILENCE>>");
}
}
//duck.java
public abstract class Duck{
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public Duck(){
}
public abstract void display();
public void performFly(){
flyBehavior.fly();
}
public void performQuack(){
quackBehavior.quack();
}
public void setFlyBehavior(FlyBehavior fb){
flyBehavior = fb;
}
public void setQuackBehavior(QuackBehavior qb){
quackBehavior = qb;
}
public void swim(){
System.out.println ("All duck float, even decoys");
}
}
//MallardDuck.java
public class MallardDuck extends Duck{
public MallardDuck(){
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
public void display(){
System.out.println("Im a real Mallard duck");
}
}
//miniducksim.java
public class MiniDuckSimulator{
public static void main (String[] args){
Duck mallard = new MallardDuck();
mallard.setQuackBehavior(new Squeak()); // this is where im lost
//how can definition of a virtual functions in C++ be dynamic?
mallard.performQuack();
mallard.performFly();
}
}
嘿 - 我也喜歡那本書,我只是假設它可以用抽象類來完成。你能發佈迄今爲止所做的代碼嗎?似乎它*應該*是可能的。 – Jeff 2010-10-08 04:39:01
我得到你的問題,但我想知道你在這種情況下對'動態'的定義是什麼? – birryree 2010-10-08 04:41:52
'如何定義C++中的虛函數?' 然後,什麼是虛函數?這些確實是動態的。 – Hemant 2010-10-08 04:42:07