Dear friends, I have one more questions for everyone in the newsgroup:
I am preparing for an interview on UNIX/C++. Could you please identify some
of the most important questions which might be asked, so that I could best
prepare for it?
Thank you,
C++J
Jul 22 '05
71 5950
JKop wrote: Opps, that wasn't my intention, this was my intention:
int main(void) { int monkeys[7] = { 3, 4 ,3, 2 ,2 ,34, 23};
std::cout << reinterpret_cas t<char&>(monkey s[5]); }
That's dangerous, you are passing to ostream::operat or<<() a char & to a
temporary.
What you probably meant to do is:
#include <iostream>
int main(void)
{
int monkeys[7] = { 3, 4 ,3, 2 ,2 ,34, 23};
std::cout << static_cast<cha r>(monkeys[5]);
}
Also reinterpret_cas t is the *last* of castings you should use, and
except of that, always try to avoid using castings at all.
Regards,
Ioannis Vranos
Ioannis Vranos posted: JKop wrote:
Is reinterpret_cas t stupid, by which I mean does it do any processing at all? For example, take the following:
unsigned char jk;
reinterpret_cas t<unsigned long&>(jk) = 4000000000UL;
Opps!! static_cast was what I was after:
unsigned char jk;
static_cast<uns igned long&>(jk) = 4000000000UL;
Here's an excerpt from http://msdn.microsoft.com/library/default.asp?
url=/library/en-us/vccelng/htm/express_74.asp :
This behavior also applies to types other than class types. For instance,
static_cast can be used to convert from an int to a char. However, the
resulting char may not have enough bits to hold the entire int value. Again,
it is left to the programmer to ensure that the results of a static_cast
conversion are safe.
union {
double double_data;
int int_data;
char char_data;
unsigned long unsigned_long_d ata;
void* void_pointer_da ta;
float* float_pointer_d ata;
} monkey;
//Now some funky code:
double recpoo;
static_cast<flo at*&>(recpoo) = &some_global_fl oat;
static_cast<uns igned long&>(recpoo) = 4000000000UL;
static_cast<cha r&>(recpoo) = 'g';
-JKop
JKop wrote: Opps!! static_cast was what I was after:
unsigned char jk;
static_cast<uns igned long&>(jk) = 4000000000UL;
That doesn't compile. However as I said in another message, casts are to
be used on the assigned value, not the object that gets that value.
Regards,
Ioannis Vranos
Ioannis Vranos wrote: JKop wrote:
Is reinterpret_cas t stupid, by which I mean does it do any processing at all? For example, take the following:
unsigned char jk;
reinterpret_cas t<unsigned long&>(jk) = 4000000000UL;
Reinterpret_cas t performs a value conversion. It doesn't modify anything on the implementation of jk. So the above has essentially no effect. It is as if you had written
unsigned char jk;
reinterpret_cas t<unsigned long&>(jk);
jk=4000000000UL ;
Regards,
Ioannis Vranos
JKop posted: This behavior also applies to types other than class types. For instance, static_cast can be used to convert from an int to a char. However, the resulting char may not have enough bits to hold the entire int value. Again, it is left to the programmer to ensure that the results of a static_cast conversion are safe.
This excerpt seems to be bullshit. Try running the following on your system.
If the above was true, then the end output should be all 255, assuming that
your system is 8-Bit char and 32-Bit long.
#include <iostream>
int main(void)
{
unsigned char jk[4] = { 0, 0, 0, 0 };
std::cout << "jk[0] == " << (int)jk[0]
<< "\r\njk[1] == " << (int)jk[1]
<< "\r\njk[2] == " << (int)jk[2]
<< "\r\njk[3] == " << (int)jk[3]
<< std::endl;
std::system("PA USE");
static_cast<uns igned long>(jk[0]) = 0xFFFFFFFF;
std::cout << "jk[0] == " << (int)jk[0]
<< "\r\njk[1] == " << (int)jk[1]
<< "\r\njk[2] == " << (int)jk[2]
<< "\r\njk[3] == " << (int)jk[3]
<< std::endl;
std::system("PA USE");
}
static_cast isn't as special as I thought. I thought it would've been able
to achieve what unions do. Ah well!
-JKop
Siemel Naran wrote: I think [that] the virtual table is implemented as an array of pointers to functions.
A jump table.
It works well whenever a pointer to a function of any signature has the same size, which is normally the case. If you have a class as follows.
Note what follows is a typical implementation, not what the standard mandates.
class Foo {
public: virtual ~Foo(void); virtual int f(int, int); virtual double g(int) const; };
then the virtual table is an array of length 3. Each element in the array is a function pointer, but each function pointer is a different signature! Sure, the compiler can do that, but we can't!
cat main.cc
class Foo {
private:
int F;
public:
virtual ~Foo(void) { }
virtual int f(int i, int j) {
int t = F;
F = i + j;
return t; }
virtual double g(int k) const { return F + k; }
};
int funny(Foo& foo) {
return foo.f(13, 23);
}
int main(int argc, char* argv[]) {
Foo foo;
return funny(foo);
}
g++ -Wall -ansi -pedantic -O2 -S main.cc cat main.s
Mike Wahler wrote: Yes, the standard does guarantee that compliant code is portable to a compliant implementation.
Please cite and quote the passage in the standard
that "guarantees " this.
Of course, compliant implementations do not exist for all platforms.
In fact, no compliant implementations exist for any platform.
The claim is vacuous.
The license that came with my GNU C++ compiler
includes the following disclaimer:
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
When you installed your compiler,
you were obliged to accept "similar terms and conditions".
Compliance with ANSI/ISO C++ standards is voluntary.
Programmers have no legal recourse against compiler developers
if their compliant programs will not port.
"Siemel Naran" <Si*********@RE MOVE.att.net> wrote in message news:<jr******* *************@b gtnsc04-news.ops.worldn et.att.net>... "pembed2003 " <pe********@yah oo.com> wrote in message
possible function definition. The lookup (not sure how the actual virtual table is implemented but if it's something like a binary tree or hash table then...) thus takes appr. the same amount of time.
I think the virtual table is implemented as an array of pointers to function. It works well whenever a pointer to a function of any signature has the same size, which is normally the case. If you have a class as follows.
Note what follows is a typical implementation, not what the standard mandates.
class Foo { virtual ~Foo(); virtual int f(int, int); virtual double g(int) const; };
then the virtual table is an array of length 3. Each element in the array is a function pointer, but each function pointer is a different signature! Sure, the compiler can do that, but we can't!
Sure we can. Here's how you might do something very similar in C. I haven't
tried compiling it, but I've done similar things in the past. (For example,
for anyone masochistic enough to do COM programming in C, the code usually
looks pretty similar to this once you strip away all the macros.)
/*
* Declaration of Foo in foo.h
*/
struct Foo_VTable;
typedef struct tagFoo {
Foo_VTable* _vptr;
} Foo;
struct Foo_VTable {
void (*dtor)(Foo* _this);
int (*f)(Foo* _this, int, int);
double (*g)(Foo const* _this, int);
};
void Foo_ctor(Foo* _this);
void Foo_dtor(Foo* _this);
int Foo_f(Foo* _this, int, int);
double Foo_g(Foo const* _this, int);
/*
* Implementation of Foo in foo.c.
*/
struct Foo_VTable const g_Foo_vtable = {
&Foo_dtor,
&Foo_f,
&Foo_g
};
void Foo_ctor(Foo* _this)
{
_this->_vfptr = &g_Foo_vtabl e;
}
/* etc. for other member functions */
/*
* The following is essentially equivalent to what
* in C++ would be written:
* Foo foo;
* foo.f(0, 0);
* foo.g(0);
*/
Foo foo;
Foo_ctor(&foo);
foo._vfptr->f(&foo, 0, 0);
foo._vfptr->g(&foo, 0);
foo._vfptr->dtor();
/*
* The following is essentially equivalent to what
* in C++ would be written:
* Foo* foo = new Foo();
* foo->f(0, 0);
* foo->g(0);
* delete foo;
*/
Foo* foo = malloc(sizeof(F oo));
Foo_ctor(foo);
foo->_vfptr->f(foo, 0, 0);
foo->_vfptr->g(foo, 0);
foo->_vfptr->dtor();
free(foo);
Niklas Borson wrote: Sure we can. Here's how you might do something very similar in C. I haven't tried compiling it, but I've done similar things in the past. (For example, for anyone masochistic enough to do COM programming in C, the code usually looks pretty similar to this once you strip away all the macros.)
// Declaration of Foo in foo.h
struct Foo_VTable;
typedef struct tagFoo { Foo_VTable* _vptr;
Should be
const void* _vptr;
} Foo;
struct Foo_VTable { void (*dtor)(Foo* _this);
Should be
void (*dtor)(const Foo*);
You need to be able to destroy const objects
as well as variable objects with the same destructor!
int (*f)(Foo* _this, int, int); double (*g)(Foo const* _this, int); };
void Foo_ctor(Foo* _this); void Foo_dtor(Foo* _this);
Should be
void Foo_dtor(const Foo*);
int Foo_f(Foo* _this, int, int); double Foo_g(Foo const* _this, int);
// Implementation of Foo in foo.c.
#include "foo.h"
// Actually, the struct Foo_VTable definition
// belongs here and *not* in the public header file. struct Foo_VTable const g_Foo_vtable = { &Foo_dtor, &Foo_f, &Foo_g };
void Foo_ctor(Foo* _this) {
_this->_vfptr = &g_Foo_vtabl e; }
// etc. for other member functions
// The following is essentially equivalent to what // what in C++ would be written: // Foo foo; // foo.f(0, 0); // foo.g(0);
Foo foo; Foo_ctor(&foo); foo._vfptr->f(&foo, 0, 0); foo._vfptr->g(&foo, 0); foo._vfptr->dtor();
Should be
foo._vfptr->dtor(foo);
// The following is essentially equivalent to what // in C++ would be written: // Foo* foo = new Foo(); // foo->f(0, 0); // foo->g(0); // delete foo;
Foo* foo = malloc(sizeof(F oo)); Foo_ctor(foo); foo->_vfptr->f(foo, 0, 0); foo->_vfptr->g(foo, 0); foo->_vfptr->dtor();
Should be
foo->_vfptr->dtor(foo);
free(foo);
Now suppose that you want to *derive* Bar from Foo
// interface
#include "foo.h"
typedef struct Bar {
Foo foo;
} Bar;
Bar Bar_ctor(void);
void Bar_dtor(const Bar*);
int Bar_f(Bar*, int, int);
double Bar_g(Foo const* _this, int);
char* Bar_hello(const Bar*);
// implementation
#include "bar.h"
struct Bar_VTable {
void (*dtor)(const Bar*);
int (*f)(Bar*, int, int);
double (*g)(Bar const*, int);
char* hello(const Bar*);
} Bar_VTable;
const Bar_VTable g_Foo_vtable = {
Bar_dtor,
Bar_f,
Bar_g,
Bar_hello
};
Bar Bar_ctor(void) {
Bar bar;
bar.foo._vptr = (const void*)(&g_Foo_v table);
return Bar;
}
// etc.
// usage
Bar bar = Bar_ctor();
Foo* pBar = (Foo*)(&bar);
((const struct Foo_VTable*)(pB ar->foo._vfptr))->f(pBar, 0, 0);
((const struct Foo_VTable*)(pB ar->foo._vfptr))->g(pBar, 0);
((const struct Foo_VTable*)(pB ar->foo._vfptr))->dtor(pBar);
"Ioannis Vranos" <iv*@guesswh.at .grad.com> skrev i en meddelelse
news:cb******** ***@ulysses.noc .ntua.gr... Ioannis Vranos wrote:
E. Robert Tisdale wrote:
How much more time it takes for the implementation to find and invoke base999999::som ething() in comparison to base78::somethi ng()? It depends upon the implementation (compiler). In the typical implementation, it takes no more time. The C++ computer programming language standard does *not* specify implementations , performance or efficiency.
Wrong. Next please. :-)
But I forgot to give you a reference. "The C++ Programming Language" 3rd Edition or Special Edition, page 324. Regards,
Ioannis Vranos
Well.... however brilliant "The C++ Programming Language" might be, it can
not answer your question.
You better consult the C++ standard for for answers to questions of that
caliber.
/Peter This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: softwareengineer2006 |
last post by:
All Interview Questions And Answers
10000 Interview Questions And Answers(C,C++,JAVA,DOTNET,Oracle,SAP)
I have listed over 10000 interview questions asked
in interview/placement test papers for all companies between year
2000-2005
in my website
http://www.geocities.com/allinterviewquestion/
So please have a look and make use of it.
|
by: Jobs |
last post by:
Download the JAVA , .NET and SQL Server interview sheet and rate
yourself. This will help you judge yourself are you really worth of
attending interviews. If you own a company best way to judge if the
candidate is worth of it.
http://www.questpond.com/InterviewRatingSheet.zip
2000 Interview questions of .NET , JAVA and SQL Server Interview
questions (worth downloading it)
|
by: Jobs |
last post by:
Download the JAVA , .NET and SQL Server interview with answers
Download the JAVA , .NET and SQL Server interview sheet and rate
yourself. This will help you judge yourself are you really worth of
attending interviews. If you own a company best way to judge if the
candidate is worth of it.
http://www.questpond.com/InterviewRatingSheet.zip
|
by: connectrajesh |
last post by:
INTERVIEWINFO.NET
http://www.interviewinfo.net
FREE WEB SITE AND SERVICE FOR JOB SEEKERS /FRESH GRADUATES
NO ADVERTISEMENT
|
by: freepdfforjobs |
last post by:
Full eBook with 4000 C#, JAVA,.NET and SQL Server Interview questions
http://www.questpond.com/SampleInterviewQuestionBook.zip
Download the JAVA , .NET and SQL Server interview sheet and rate
yourself. This will help you judge yourself are you really worth of
attending interviews. If you own a company best way to judge if the
candidate is worth of it.
http://www.questpond.com/InterviewRatingSheet.zip
| |
by: freesoftwarepdfs |
last post by:
Ultimate list of Interview question website.....Do not miss it
http://www.questpond.com
http://msdotnetsupport.blogspot.com/2007/01/net-interview-questions-by-dutt-part-2.html
http://msdotnetsupport.blogspot.com/2006/08/net-windows-forms-interview-questions.html
http://msdotnetsupport.blogspot.com/2006/08/net-remoting-interview-questions.html
http://msdotnetsupport.blogspot.com/2006/08/c-interview-questions.html...
|
by: ramu |
last post by:
C# Interview Questions and Answers8
http://allinterviewsbooks.blogspot.com/2008/07/c-interview-questions-and-answers8.html
C# Interview Questions and Answers7
http://allinterviewsbooks.blogspot.com/2008/07/c-interview-questions-and-answers7.html
C# Interview Questions and Answers 6
http://allinterviewsbooks.blogspot.com/2008/07/c-interview-questions-and-answers-6.html
C# Interview Questions and Answers 5...
|
by: reema |
last post by:
EJB Interview Questions
http://interviewdoor.com/technical/EJB-Interview-Questions.htm
CSS Interview Questions
http://interviewdoor.com/technical/CSS-Interview-Questions.htm
C Interview Questions
http://interviewdoor.com/technical/C-Interview-Questions.htm
C# Interview Questions
http://interviewdoor.com/technical/C-sharp-Interview-Questions.htm
C++ Interview Questions
http://interviewdoor.com/technical/C++-Interview-Questions.htm
|
by: reema |
last post by:
EJB Interview Questions
http://interviewdoor.com/technical/EJB-Interview-Questions.htm
CSS Interview Questions
http://interviewdoor.com/technical/CSS-Interview-Questions.htm
C Interview Questions
http://interviewdoor.com/technical/C-Interview-Questions.htm
C# Interview Questions
http://interviewdoor.com/technical/C-sharp-Interview-Questions.htm
C++ Interview Questions
http://interviewdoor.com/technical/C++-Interview-Questions.htm
|
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: 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: 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: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
|
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating effective websites that not only look great but also perform exceptionally well. In this comprehensive...
| |