OK!
I had this nagging doubt
Consider (without worrying abt access specifiers)
class Kid : public Parent{...};
Parent::someFun c()
{
Kid k;
}
ISSUE- this new Kid , while constructing it, can't I make the
parent of this new kid point to the already existing parent. DO we
REALLY NEED to create a Parent each time a Kid object is created.
Thanks a lot!
JON 9 2082
* jon wayne: OK! I had this nagging doubt
Consider (without worrying abt access specifiers) class Kid : public Parent{...};
This says that a Kid is always a Parent, from the moment it's born.
Parent::someFun c() { Kid k; } ISSUE- this new Kid , while constructing it, can't I make the parent of this new kid point to the already existing parent. DO we REALLY NEED to create a Parent each time a Kid object is created.
You have said, via the inheritance, that every Kid has a Parent base class
sub-object.
But probably the inheritance is plain wrong, otherwise you wouldn't ask.
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
jon wayne wrote: OK! I had this nagging doubt
Consider (without worrying abt access specifiers) class Kid : public Parent{...};
Parent::someFun c() { Kid k; } ISSUE- this new Kid , while constructing it, can't I make the parent of this new kid point to the already existing parent.
No.
DO we REALLY NEED to create a Parent each time a Kid object is created.
Yes.
If these facts are wrong for your program, then you shouldn't be using
inheritance.
john
jon wayne wrote: OK! I had this nagging doubt
Consider (without worrying abt access specifiers) class Kid : public Parent{...};
Parent::someFun c() { Kid k; } ISSUE- this new Kid , while constructing it, can't I make the parent of this new kid point to the already existing parent. DO we REALLY NEED to create a Parent each time a Kid object is created.
I think you need a different design. Yours says that a Kid is also a Parent.
Here's a suggestion:
class Person
{
// members common to all people
};
class Kid : public Person
{
// members common to just Kids
// including possibly pointers to Parents
};
class Parent : public Person
{
// members common to just parents
std::vector<Kid > children; // (or vector<Kid*>) the parent's children
};
This still isn't right, assuming you are trying to model human families,
because _two_ parents share the same children, but you get the idea.
DW
David White wrote: jon wayne wrote:
OK! I had this nagging doubt
Consider (without worrying abt access specifiers) class Kid : public Parent{...};
Parent::someFun c() { Kid k; } ISSUE- this new Kid , while constructing it, can't I make the parent of this new kid point to the already existing parent. DO we REALLY NEED to create a Parent each time a Kid object is created.
I think you need a different design. Yours says that a Kid is also a Parent. Here's a suggestion:
class Person { // members common to all people };
class Kid : public Person { // members common to just Kids // including possibly pointers to Parents };
class Parent : public Person { // members common to just parents std::vector<Kid > children; // (or vector<Kid*>) the parent's children };
This still isn't right, assuming you are trying to model human families, because _two_ parents share the same children, but you get the idea.
DW
I felt that the OP was just using Kid and Parent as role describing
names, rather like people use Base and Derived. But yes if he *really*
has a class called Kid derived from a class called Parent, then
something is seriously wrong.
john
"jon wayne" <jo**********@g mail.com> wrote in message
news:11******** **************@ g44g2000cwa.goo glegroups.com.. . OK! I had this nagging doubt
Consider (without worrying abt access specifiers) class Kid : public Parent{...};
Parent::someFun c() { Kid k; } ISSUE- this new Kid , while constructing it, can't I make the parent of this new kid point to the already existing parent. DO we REALLY NEED to create a Parent each time a Kid object is created.
Thanks a lot! JON
I think the OP is mistaking an object-level relationship with class-level
relationship. What the OP wants to model, is the relationship between a kid
and a parent, which, naturally, is an object-level relationship. This
relationship can be built up on object reference in general, or pointers to
objects in C++:
class Person
{
public:
Person* parent1;
Person* parent2;
// ...
};
Person Merlin;
Person Amily;
Person Oliver;
// Oliver is the son of Merlin and Amily:
Oliver.parent1 = &Merlin;
Oliver.parent2 = &Amily;
The OP takes the fact that a human kid usually inherits from his/her
parent(s) and try to use C++ inheritance to model at class level, which is
the wrong anology. In C++, a derived class is-a and includes a base class.
For example, an apple is a fruit, and an apple includes everything you can
imagine in a fruit, so you can use an apple in anyway you can use a fruit.
A kid is not (necessarily) a parent. You certainly should not, and cannot,
treat your kid exactly the same way you treat your parent. A parental
relationship is down to individuals, and is an object-level relationship.
Ben
"John Harrison" <jo************ *@hotmail.com> wrote in message
news:If******** ********@newsfe 1-gui.ntli.net... David White wrote: I think you need a different design. Yours says that a Kid is also a
Parent. Here's a suggestion:
[snip]
I felt that the OP was just using Kid and Parent as role describing names, rather like people use Base and Derived. But yes if he *really* has a class called Kid derived from a class called Parent, then something is seriously wrong.
I thought the use of the name 'Kid', rather than 'Child', along with the
implication that the parent already exists, suggested that the names were
meant to be taken literally. Anyway, the OP can clarify if necessary.
DW
"jon wayne" <jo**********@g mail.com> wrote in message
news:11******** **************@ g44g2000cwa.goo glegroups.com.. . OK! I had this nagging doubt
Consider (without worrying abt access specifiers) class Kid : public Parent{...};
Parent::someFun c() { Kid k; } ISSUE- this new Kid , while constructing it, can't I make the parent of this new kid point to the already existing parent.
What do you mean by "parent of"? Using class names which are the same as
concepts (such as parent, meaning the specific class "Parent", as well as
the generic meaning "base class", sometimes also called "parent class"),
makes it difficult to determine what you're referring to.
There are two kinds of parent-child relationships (disregarding your class
names for the moment). One is inheritence, which you've shown, where some
people refer to the base class as the parent class.
There is also the "tree" relationship, where a "parent node" contains
pointers to one or more "child nodes", and a "child node" often contains a
pointer to its "parent node". If that's what you're talking about, then you
should not be using inheritence here. So I'll assume you're talking about
inheritence...
The Kid class has no "pointer" to a "parent", at least not in the code
you've shown. It is derived from Parent, and can be considered to actually
_be_ a Parent in this case (since you've used public inheritence).
When you create a Kid object, memory is allocated for a Kid object. Then,
the constructor for the Parent class initializes that part of the new Kid
object which is declared within the Parent class. Then, the constructor for
the Kid class is executed, initializing any members which were declared in
the Kid class itself.
So you personally don't create a Parent object, and then create a Kid
object. If you want a Kid object, then you just create one. Because you've
defined Kid as a class publicly derived from Parent, a Kid object can also
be treated as a Parent object (if you're using a reference or pointer
variable). That's called polymorphism. But there's no "pointer" to a
Parent object inside the Kid object. It's just part of the Kid object.
DO we REALLY NEED to create a Parent each time a Kid object is created.
You don't do that, the compiler does that. You've declared Kid as being
derived from Parent, so every member that is declared within the Parent
class is _automatically_ part of a Kid object as well.
But, if you really _want_ a pointer to a Parent object inside your Kid
object, then you're talking about a whole different subject, and you
probably didn't want to use inheritence in the first place.
-Howard
On Wed, 21 Sep 2005 05:28:18 GMT, al***@start.no (Alf P. Steinbach)
wrote: Consider (without worrying abt access specifiers) class Kid : public Parent{...};
This says that a Kid is always a Parent, from the moment it's born.
Well, actually the Kid is first a Parent, even before it is born <g>
-- the base class is always constructed first.
--
Bob Hairgrove No**********@Ho me.com
"jon wayne" <jo**********@g mail.com> wrote in message
news:11******** **************@ g44g2000cwa.goo glegroups.com.. . OK! I had this nagging doubt
Consider (without worrying abt access specifiers) class Kid : public Parent{...};
Parent::someFun c() { Kid k; } ISSUE- this new Kid , while constructing it, can't I make the parent of this new kid point to the already existing parent. DO we REALLY NEED to create a Parent each time a Kid object is created.
You are saying a Kid IS A parent (which he will eventually be). But I think
you also want to know the kids parents themselves. So there are, in fact, 3
parents. The kid (who is a parent) his father and his mother. Which gets
compounded by the fact that his father was a kid...
You need to think about your heirarchy. Why do you have a kid class in the
first place? Arent' they both, in fact, both kids and parents?
So something like this:
class Person
{
private:
Person* Father;
Person* Mother;
std::vector<Per son*> Children;
public:
Person(Person* father, Person* mother): Father(father), Mother(mother)
{};
AddChild(Person * child) { Children.push_b ack(child); };
}
Now you have within each person a pointer to their father, their mother, and
potential children.
Because, in your stated scenario, not only is a Kid a Parent, but a Parent
is a Kid, hence, they are the same thing.
I use pointers because I'm used to them. I presume you can do the same
thing with references, just not positive on the syntax. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: A |
last post by:
Hi,
I have always been taught to use an inialization list for initialising data
members of a class. I realize that initialsizing primitives and pointers use
an inialization list is exactly the same as an assignment, but for class
types it has a different effect - it calls the copy constructor.
My question is when to not use an initalisation list for initialising data
members of a class?
|
by: Busin |
last post by:
Classes B, C, D and E are derived from base class A.
A* CreateB();
A* CreateC();
A* CreateD();
A* CreateE();
class X
{
public:
|
by: Squeamz |
last post by:
Hello,
Say I create a class ("Child") that inherits from another class
("Parent"). Parent's destructor is not virtual. Is there a way I can
prevent Parent's destructor from being called when a Child object goes
out of scope?
Specifically, I am dealing with a C library that provides a function
that must be called to "destruct" a particular struct (this struct is
dynamically allocated by another provided function). To avoid memory
|
by: Stuart McGraw |
last post by:
I haven't been able to figure this out and would
appreciate some help...
I have two tables, both with autonumber primary
keys, and linked in a conventional master-child
relationship. I've created forms for both those
tables, and inserted the child table form into the
master table form as a subform. It works just as
it is supposed to, in that I can create a new master
record, and then add detail records.
|
by: Kevin Prichard |
last post by:
Hi all,
I've recently been following the object-oriented techiques discussed
here and have been testing them for use in a web application. There is
problem that I'd like to discuss with you experts.
I would like to produce Javascript classes that can be "subclassed"
with certain behaviors defined at subclass time. There are plenty of
ways to do this through prototyping and other techniques, but these
behaviors need to be static and...
| |
by: Sam Kong |
last post by:
Hello!
I got recently intrigued with JavaScript's prototype-based
object-orientation.
However, I still don't understand the mechanism clearly.
What's the difference between the following two?
(1)
|
by: Cylix |
last post by:
I have a 4row x 1col table, I would like to drop all the content of row
three.
Since Mac IE5.2 does not suppport deleteRow method,
I have also try to set the innerHTML=''; but it does not work.
How can I delete the node from DOM in other way?
Thanks.
|
by: koschwitz |
last post by:
Hi,
I hope you guys can help me make this simple application work. I'm
trying to create a form displaying 3 circles, which independently
change colors 3 times after a random time period has passed.
I'm struggling with making the delegate/invoke thing work, as I know
GUI objects aren't thread-safe. I don't quite understand the concept
I'm supposed to use to modify the GUI thread-safe.
Below is my form and my Circle class. Currently,...
|
by: tonytech08 |
last post by:
What I like about the C++ object model: that the data portion of the
class
IS the object (dereferencing an object gets you the data of a POD
object).
What I don't like about the C++ object model: that most OO features
are not
available for class object design without loss of POD-ness.
So, I'm more than leaning toward "bad" because of the limitations and
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
| |
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
| |
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |