|
Hi All,
Can anybody tell me the exact "Difference between C++ Structures and C++ Classes".
I came to know that, apart from the access specifier Public(Structures) and Private(Classes) there is no other difference. Is that so?
In that case why do they have 2 difference entities namely Structure and Classes with similar functionality??
Kindly clarify.
|
|
|
|
|
I guess people who created C++ like the name "class".
|
|
|
|
|
Subramaniam s.V. wrote: In that case why do they have 2 difference entities namely Structure and Classes with similar functionality?
'struct' allows for backwards-compatibility with C
edit: what about this deserves a '1' vote?
-- modified at 15:09 Tuesday 8th August, 2006
|
|
|
|
|
Then why class were created?? struct itself is enough ..na?
nave
|
|
|
|
|
but c++ structure can have visibility declarators (public, protected, private), and member functions too..
nave
|
|
|
|
|
that's why i explicitely said C structs , not C++...
|
|
|
|
|
toxcct wrote: that's why i explicitely said C structs, not C++...
So you deliberatly set him on a wrong track?
Not very nice...
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation."
-- Caius Petronius, Roman Consul, 66 A.D.
|
|
|
|
|
|
toxcct wrote: are you stupid ?
No. Are you?
toxcct wrote: C is a subset of C++, and you cannot do C++ hiding C totally
Absolutly totaly not.
Out modern C++ is derived from a old version of K&R-C by people with a deep understanding of and a great liking for C.
But C is in no way a subset of C++.
In many cases C++ can be considered a superset of C, but not in all.
And IMHO you really *should* not know too much of C to write good style C++.
toxcct wrote: C structs are different from C++ structs
Yes.
But C-structs were not what we others were talking about, and you were introducing them in a way carefully crafted as to not draw the attention.
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation."
-- Caius Petronius, Roman Consul, 66 A.D.
|
|
|
|
|
jhwurmbach wrote: is in no way a subset of C++.
yes it is. Read Bjarne Stroustrup about this.
jhwurmbach wrote: And IMHO you really *should* not know too much of C to write good style C++.
agreed, and i never said the opposite.
jhwurmbach wrote: C-structs were not what we others were talking about
i only talked about them because only introduced their purpose into the C++ language : compatibility
|
|
|
|
|
jhwurmbach wrote: Out modern C++ is derived from a old version of K&R-C...
More specifically, it is a superset of ANSI C, which is, in turn, a superset of K&R C.
"Money talks. When my money starts to talk, I get a bill to shut it up." - Frank
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
DavidCrow wrote:
[Our modern C++] is a superset of ANSI C, which is, in turn, a superset of K&R C.
Hmm, really?!?
I was under the impression that the C++-Standard predates ANSI-C.
But i am much too lethargic to double-check that.
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation."
-- Caius Petronius, Roman Consul, 66 A.D.
|
|
|
|
|
jhwurmbach wrote: I was under the impression that the C++-Standard predates ANSI-C.
I think they are roughly nine years apart. The ANSI C standard was completed in 1989. The ANSI-ISO C++ standard was completed in 1998. The next C++ standard is expected out within the next 3 years.
"Money talks. When my money starts to talk, I get a bill to shut it up." - Frank
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
DavidCrow wrote: The ANSI C standard was completed in 1989. The ANSI-ISO C++ standard was completed in 1998.
Yes, you are right.
I was thinking of ANSI-C99, but before there was a ANSI-C90.
DavidCrow wrote: The next C++ standard is expected out within the next 3 years.
That is what they are telling us for years.
I would guess that C++0X will need a hexadecimal digit for X...
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation."
-- Caius Petronius, Roman Consul, 66 A.D.
|
|
|
|
|
Hi guys,
havent found the answer for my question till now..discussion seems to be nice and interesting but pls answer to the question that i have asked..
thanks
|
|
|
|
|
Your question has been answered quite a few times, additionally, a lot of links have been given.
Short recapitulation:
In class es, the default visibility is private , in struct s, it is public .
Classes can be template parameters, where structs can not.
Thats all, folks.
-- modified at 8:11 Wednesday 9th August, 2006
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation."
-- Caius Petronius, Roman Consul, 66 A.D.
|
|
|
|
|
toxcct wrote: C is a subset of C++...
Maybe at a high level, but not in a pure mathematical sense. It's possible to have a valid C program that is not valid C++ code. C++ can be considered a superset of C, however.
"Money talks. When my money starts to talk, I get a bill to shut it up." - Frank
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
'class' is proper OO terminology, 'struct' isn't.
but default member access isn't the only difference between struct and class: you can't use templates on structs - only on classes .
a 'class' is intended to be the primary object type. 'struct' is for backwards compatibility. and, yes they overlap .
|
|
|
|
|
Chris Losinger wrote: you can't use templates on structs - only on classes .
If you mean you can't use struct keyword inside of a template declaration, you are right. However, it is perfectly possible to make struct templates.
|
|
|
|
|
right.
template < struct T > class nope {...}; = bad
|
|
|
|
|
Default inheritance type: a struct entails public inheritance by default whereas a class entails private inheritance.
Regards
Amar
|
|
|
|
|
Subramaniam s.V. wrote:
Can anybody tell me the exact "Difference between C++ Structures and C++ Classes".
This is discussed in The Design and Evolution of C++.
"Money talks. When my money starts to talk, I get a bill to shut it up." - Frank
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
About differences. The default protection in case of class is "private ", whereas in case of struct it is "public ":
class A
{
int a;
. . .
};
struct A
{
int a;
. . .
};
The default inheritance protection in case of class is "private ", whereas in case of struct it is "public ":
class B : A
{
};
struct B : A
{
};
That’s my opinion about differences.
|
|
|
|
|
|
struct and class in C++ are identical with the exception of their default visibility (private for class, public for struct). The struct keyword was a leftover from the C lineage of C++. That said, when a C++ compiler sees the struct keyword, it will compile it, but not in the same way that a C compiler would have. The C++ compiler will generate a default constructor, destructor, and copy-assignment operator (whereas a C compiler would just treat it as a new datatype).
They both exist in C++ because of the desire to be able to compile C code with a C++ compiler. Removing keywords such as this would have made such backwards-compatability impossible without first modifying the codebase.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|