Я новичок в программировании ООП и C ++, и я в настоящее время изучаю шаблоны проектирования.
Просто возьмите книгу Head First Design Patterns, чтобы извлечь уроки.Это действительно здорово, и я уже знакомлюсь с основными понятиями. В первой главе рассказывается о программировании интерфейса, а не о реализации.К сожалению для меня, хотя в примерах используется java.
Ниже приведен пример кода java из книг, использующих «интерфейс», я понимаю, что это нельзя напрямую перенести в C ++.Я пытался реализовать абстрактный базовый класс C ++.Но я потерялся, особенно в динамической установке 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();
}
}