Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

why seeples no interfaces?

Name: Anonymous 2012-01-14 0:50


#include<iostream>

using namespace std;

class A {
public:

  A() {
  }

  virtual ~A() {
  }

  void waka() {
    cout << "WakA!";
  }

};


class IWoopaWaka {
public:
  IWoopaWaka() {
  }

  virtual ~IWoopaWaka() {
  }

  virtual void waka() = 0;
  virtual void woopa() = 0;
};

class B : public IWoopaWaka, public A {
public:
  B() : A() {
  }

  virtual ~B() {
  }

  void woopa() {
    cout << "Woooopa!";
  }
};


int main(int argc, char** argv) {
  IWoopaWaka* wapa = new B();
  wapa->waka();
  wapa->woopa();
  delete wapa;
  return 0;
}


$g++ m.cpp
m.cpp: In function ‘int main(int, char**)’:
m.cpp:49: error: cannot allocate an object of abstract type ‘B’
m.cpp:34: note:   because the following virtual functions are pure within ‘B’:
m.cpp:30: note:         virtual void IWoopaWaka::waka()


#include<iostream>

using namespace std;

class A {
public:

  A() {
  }

  virtual ~A() {
  }

  void waka() {
    cout << "WakA!";
  }

};


class IWoopaWaka {
public:
  IWoopaWaka() {
  }

  virtual ~IWoopaWaka() {
  }

  virtual void waka() = 0;
  virtual void woopa() = 0;
};

class B : public IWoopaWaka, public A {
public:
  B() : A() {
  }

  virtual ~B() {
  }

  void waka() {
    A::waka();
  }

  void woopa() {
    cout << "Woooopa!";
  }
};


int main(int argc, char** argv) {
  IWoopaWaka* wapa = new B();
  wapa->waka();
  wapa->woopa();
  delete wapa;
  return 0;
}


$g++ m.cpp
$a.out
WakA!Woooopa!$

Name: Anonymous 2012-01-14 1:56

>>8
but..buta..seeples no has no replacement for interfaces. There seems to be no way. Can you do it the better way in seeples? I was actually going to ask if anyone knew of a less archaic method than:


#include<iostream>

using namespace std;

class A {
public:
  virtual ~A() {}

  void waka1() { cout << "WakA1!"; }
  void waka2() { cout << "WakA2!"; }
  void waka3() { cout << "WakA3!"; }
  void waka4() { cout << "WakA4!"; }
  void waka5() { cout << "WakA5!"; }
  void waka6() { cout << "WakA6!"; }
  void waka7() { cout << "WakA7!"; }
  void waka8() { cout << "WakA8!"; }
};


class IWoopaWaka {
public:
  virtual ~IWoopaWaka() {}
  virtual void waka1() = 0;
  virtual void waka2() = 0;
  virtual void waka3() = 0;
  virtual void waka4() = 0;
  virtual void waka5() = 0;
  virtual void waka6() = 0;
  virtual void waka7() = 0;
  virtual void waka8() = 0;
  virtual void woopa() = 0;
};

class B : public A, public IWoopaWaka {
public:
  B() : A() { }

  virtual ~B() {}

  void woopa() { cout << "Woooopa!"; }
};


int main(int argc, char** argv) {
  IWoopaWaka* wapa = new B();
  wapa->waka1();
  wapa->waka2();
  wapa->waka3();
  wapa->waka4();
  wapa->waka5();
  wapa->waka6();
  wapa->waka7();
  wapa->waka8();
  wapa->woopa();
  delete wapa;
  return 0;
}

$g++ m.cpp
m.cpp: In function ‘int main(int, char**)’:
m.cpp:46: error: cannot allocate an object of abstract type ‘B’
m.cpp:35: note:   because the following virtual functions are pure within ‘B’:
m.cpp:24: note:         virtual void IWoopaWaka::waka1()
m.cpp:25: note:         virtual void IWoopaWaka::waka2()
m.cpp:26: note:         virtual void IWoopaWaka::waka3()
m.cpp:27: note:         virtual void IWoopaWaka::waka4()
m.cpp:28: note:         virtual void IWoopaWaka::waka5()
m.cpp:29: note:         virtual void IWoopaWaka::waka6()
m.cpp:30: note:         virtual void IWoopaWaka::waka7()
m.cpp:31: note:         virtual void IWoopaWaka::waka8()

#include<iostream>

using namespace std;

class A {
public:
  virtual ~A() {}

  void waka1() { cout << "WakA1!"; }
  void waka2() { cout << "WakA2!"; }
  void waka3() { cout << "WakA3!"; }
  void waka4() { cout << "WakA4!"; }
  void waka5() { cout << "WakA5!"; }
  void waka6() { cout << "WakA6!"; }
  void waka7() { cout << "WakA7!"; }
  void waka8() { cout << "WakA8!"; }
};


class IWoopaWaka {
public:
  virtual ~IWoopaWaka() {}
  virtual void waka1() = 0;
  virtual void waka2() = 0;
  virtual void waka3() = 0;
  virtual void waka4() = 0;
  virtual void waka5() = 0;
  virtual void waka6() = 0;
  virtual void waka7() = 0;
  virtual void waka8() = 0;
  virtual void woopa() = 0;
};

class B : public A, public IWoopaWaka {
public:
  B() : A() { }

  virtual ~B() {}

  void woopa() { cout << "Woooopa!"; }

  void waka1() { A::waka1(); }
  void waka2() { A::waka2(); }
  void waka3() { A::waka3(); }
  void waka4() { A::waka4(); }
  void waka5() { A::waka5(); }
  void waka6() { A::waka6(); }
  void waka7() { A::waka7(); }
  void waka8() { A::waka8(); }
};

int main(int argc, char** argv) {
  IWoopaWaka* wapa = new B();
  wapa->waka1();
  wapa->waka2();
  wapa->waka3();
  wapa->waka4();
  wapa->waka5();
  wapa->waka6();
  wapa->waka7();
  wapa->waka8();
  wapa->woopa();
  delete wapa;
  return 0;
}

$g++ m.cpp
$a.out
WakA1!WakA2!WakA3!WakA4!WakA5!WakA6!WakA7!WakA8!Woooopa!


Seeples can't seem to choose the non pure virtual method when resolving ambiguous method calls. For some reason, it still tries to call the pure virtual one when a real method is available. y u do this seeples? y u make me reimplement all doos methods and make em call the non virtual method. y u do dis to me?

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List