Site Sponsors:
GNU C++: Ineritance & Default Parameter Confusion 
For those who like to use C++, the sole justification for many is the ability to implement a common signature over several related implementations.

Commonly known as "inheritance," when we need to use a parent's function / signature, yet provide a unique child-implementation of our own, we call it "polymorphism."

When it comes to assigning default parameters, we should note that those actually applied to our call will depend upon the receiving type.

Specifically, given the following base class & factory enumeration:
namespace BlogNouns {

enum Types {
typeThing, typePlace, typePerson
};

class Thing {
public:
virtual void speak(const char *psz = "Ima Thing") {
printf("Thing: %s\n", psz);
}

static Thing& Create(Types which);
};
}
, upon creating a few children we shall also provide a different default "speak" parameter:
    class Place : public Thing {
public:
virtual void speak(const char *psz = "Ima Place") {
printf("Place: %s\n", psz);
}

};

class Person : public Place {
public:
virtual void speak(const char *psz = "Ima Person") {
printf("Person: %s\n", psz);
}

Having set the stage for the first demonstration, supporting the aspersion =) we'll see:
using namespace BlogNouns;


int main(int argc, char** argv) {
puts("MyNouns");
Thing& noun = Thing::Create(Types::typePerson);
noun.speak();
delete &noun;

noun = Thing::Create(Types::typePlace);
noun.speak();
delete &noun;

noun = Thing::Create(Types::typeThing);
noun.speak();
delete &noun;

return 0;
}

-will use the default receiving-type ("Thing") parameter:

MyNouns
Person: Ima Thing
Place: Ima Thing
Thing: Ima Thing

Conversely however, whenever we change the receiving type to match the type actually created, we see that we will - instead - use that associated receiving-type's default parameter:

int main(int argc, char** argv) {

puts("BlogNouns");
Person& person = (Person&)Thing::Create(Types::typePerson);
person.speak();
delete &person;

Place& place = (Place&)Thing::Create(Types::typePlace);
place.speak();
delete &place;

Thing& thing = Thing::Create(Types::typeThing);
thing.speak();
delete &thing;

return 0;
}

BlogNouns
Person: Ima Person
Place: Ima Place
Thing: Ima Thing
Finally, note that I'm-a using:
c++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



Sharing is caring,


-Rn



[ add comment ] ( 10 views )   |  permalink
zPython Clock, Revisited 
Here is an upgrade for zClock:



from tkinter import *
import time

zProgram = Tk()
zProgram.title("zPython Clock - Soft9000.com")
zClock = Label(zProgram,
font=('ariel', 72, 'bold'),
bg='gold',
fg='white')

zDay = Label(zProgram,
font=('ariel', 36, 'bold'),
bg='gold',
fg='green')

zDate = Label(zProgram,
font=('ariel', 36, 'bold'),
bg='gold',
fg='blue')

zClock.pack(fill=BOTH, expand=1)
zDay.pack(side='left', fill=X, expand=1)
zDate.pack(side='right', fill=X, expand=1)


def zTimer():
zClock.config(text=time.strftime('%H:%M:%S'))
zDay.config(text=time.strftime('%a'))
zDate.config(text=time.strftime('%m/%d/%y'))
zClock.after(500, zTimer)


zTimer()
zProgram.mainloop()


Here is zVideo :-)


[ add comment ] ( 14 views )   |  permalink  |  related link

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Next> Last>>