Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > access to structure members

Reply
Thread Tools

access to structure members

 
 
noone@all.com
Guest
Posts: n/a
 
      05-31-2007
What is the syntax to access members of a structure without
explicitly naming the structure in every access?

struct mytype {
int a;
char* b;
long c;
} IT;

How can I access the structure members in a way similar to the old pascal
USING statement?

using IT (
a=5;
b="hello";
c=45l;
);


I cannot remember the c++ syntax to accomplish this.


 
Reply With Quote
 
 
 
 
red floyd
Guest
Posts: n/a
 
      05-31-2007
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> What is the syntax to access members of a structure without
> explicitly naming the structure in every access?
>
> struct mytype {
> int a;
> char* b;
> long c;
> } IT;
>
> How can I access the structure members in a way similar to the old pascal
> USING statement?
>
> using IT (
> a=5;
> b="hello";
> c=45l;
> );
>
>


1. The old Pascal construct was a "with" statement.
2. There is no way to do what you want. Why do you want to do so? Your
code is more maintainable without it.
 
Reply With Quote
 
 
 
 
Victor Bazarov
Guest
Posts: n/a
 
      05-31-2007
(E-Mail Removed) wrote:
> What is the syntax to access members of a structure without
> explicitly naming the structure in every access?
>
> struct mytype {
> int a;
> char* b;
> long c;
> } IT;
>
> How can I access the structure members in a way similar to the old
> pascal USING statement?
>
> using IT (
> a=5;
> b="hello";
> c=45l;
> );
>
>
> I cannot remember the c++ syntax to accomplish this.


Nobody can. There is no such syntax. Non-static data members
require an instance of the class to be accessed. You can only
access them without additional qualification inside a non-static
member function, where there is an implicit "this->".

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask


 
Reply With Quote
 
Salt_Peter
Guest
Posts: n/a
 
      05-31-2007
On May 31, 11:32 am, (E-Mail Removed) wrote:
> What is the syntax to access members of a structure without
> explicitly naming the structure in every access?
>
> struct mytype {
> int a;
> char* b;
> long c;
>
> } IT;
>
> How can I access the structure members in a way similar to the old pascal
> USING statement?
>
> using IT (
> a=5;
> b="hello";


Its time to unlearn the lies:
member b is a pointer to a single character. char* b cannot store
anything else.
Relying on a pointer to a single char to store an array of characters
is doomed to fail.
The compiler has not allocated or reserved memory to store an array of
chars.
You'ld have to store the null-terminated character sequence using a
buffer (ie: char b[128].
However - there is a better solution: std::string (its dynamic and
packed with features).

> c=45l;
> );
>
> I cannot remember the c++ syntax to accomplish this.


Using a function or a constructor. IT is not a type/struct/class, its
an instance of mytype.
Consider a primitive array: mytype arr[100];
Which one of those 100 instances' member's did you want to modify?
You need to tell the program which one to act on. (ie:
array[0].set(...)
But wait a minute, why set anything when you can allocate AND
initialize private members simultaneously at construction time?

#include <iostream>
#include <string>

struct mytype {
private:
int a;
std::string b;
long c;
public:
// default ctor + init list
mytype()
: a(0), b("default string"), c(0) { }
// parametized ctor + init list
mytype(const int n,
const std::string& s,
const long l)
: a(n), b(s), c(l) { }
// friend op<< for output
friend std:stream& operator<<(std:stream& os, const mytype& t)
{
os << "a = " << t.a;
os << "\nb = " << t.b;
os << "\nc = " << t.c;
return os;
}
};

int main()
{
mytype instance(5, "hello", 451); // done
std::cout << instance << std::endl;

mytype array[100];
std::cout << array[0] << std::endl;
}

// Note: all 100 instances in that array[] are already set.

 
Reply With Quote
 
Salt_Peter
Guest
Posts: n/a
 
      05-31-2007
On May 31, 11:32 am, (E-Mail Removed) wrote:
> What is the syntax to access members of a structure without
> explicitly naming the structure in every access?
>
> struct mytype {
> int a;
> char* b;


Its time to unlearn the lies:
member b is a pointer to a single character. char* b cannot store
anything else. Relying on a pointer to a single char to store an array
of characters
is doomed to fail. The compiler has not allocated or reserved memory
to store an array of
chars. You'ld have to store the null-terminated character sequence
using a
buffer (ie: char b[128].
However - there is a better solution: std::string (its dynamic and
packed with features).

> long c;
>
> } IT;
>
> How can I access the structure members in a way similar to the old pascal
> USING statement?
>
> using IT (
> a=5;
> b="hello";
> c=45l;
> );
>
> I cannot remember the c++ syntax to accomplish this.


Using a function or a constructor. IT is not a type/struct/class, its
an instance of mytype. Consider a primitive array:
mytype arr[100];
Which one of those 100 instances' member's did you want to modify? You
need to tell the program which one to act on. (ie: array[0].set(...)
But wait a minute, why set anything when you can allocate AND
initialize private members simultaneously at construction time?

#include <iostream>
#include <string>

struct mytype {
private:
int a;
std::string b;
long c;
public:
// default ctor + init list
mytype()
: a(0), b("default string"), c(0) { }
// parametized ctor + init list
mytype(const int n,
const std::string& s,
const long l)
: a(n), b(s), c(l) { }
// friend op<< for output
friend std:stream& operator<<(std:stream& os, const mytype& t)
{
os << "a = " << t.a;
os << "\nb = " << t.b;
os << "\nc = " << t.c;
return os;
}

};

int main()
{
mytype instance(5, "hello", 451); // done
std::cout << instance << std::endl;

mytype array[100];
std::cout << array[0] << std::endl;

}

// Note: all 100 instances in that array[] are already set.

 
Reply With Quote
 
Devon Null
Guest
Posts: n/a
 
      05-31-2007
(E-Mail Removed) wrote:
> What is the syntax to access members of a structure without
> explicitly naming the structure in every access?
>
> struct mytype {
> int a;
> char* b;
> long c;
> } IT;
>
> How can I access the structure members in a way similar to the old pascal
> USING statement?
>
> using IT (
> a=5;
> b="hello";
> c=45l;
> );
>
>
> I cannot remember the c++ syntax to accomplish this.
>
>

couldn't you use #define and rename each one to an alias? Not saying it
is a good way, just a possibility (I think). Feel free to correct me if
I am wrong.
 
Reply With Quote
 
Pete Becker
Guest
Posts: n/a
 
      05-31-2007
Salt_Peter wrote:
>> b="hello";

>
> Its time to unlearn the lies:
> member b is a pointer to a single character. char* b cannot store
> anything else.
> Relying on a pointer to a single char to store an array of characters
> is doomed to fail.
> The compiler has not allocated or reserved memory to store an array of
> chars.


On the contrary: the compiler allocated and reserved memory for the
string "hello", including its terminating null character. It's perfectly
appropriate to refer to that array through a char* (although a const
char* would be preferable). Pointers often point to a single object, but
they also often point to the first element of an array.

> You'ld have to store the null-terminated character sequence using a
> buffer (ie: char b[128].
> However - there is a better solution: std::string (its dynamic and
> packed with features).
>


That depends on what the problem is. There's nothing in the original
question that supports a judgment about the relative merits of char*
versus std::string. That's not important, though, since it has nothing
to do with what was actually asked.

--

-- Pete
Roundhouse Consulting, Ltd. (www.versatilecoding.com)
Author of "The Standard C++ Library Extensions: a Tutorial and
Reference." (www.petebecker.com/tr1book)
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
class members vs instance members hdixon Python 3 07-09-2006 06:56 PM
Difference between static final members and final static members(if any)? JFCM Java 4 02-07-2006 11:32 AM
Which members are created automatically, which members are not inherited? lovecreatesbeauty C Programming 43 02-06-2006 11:36 PM
Templates: Members Vs. non-members Dave C++ 3 08-10-2004 11:23 AM
Can nested class members access private members of nesting class? CoolPint C++ 8 12-14-2003 02:30 PM



Advertisments