|
Thanks Regards.
--------
M.D.V.
If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about?
Help me to understand what I'm saying, and I'll explain it better to you
Rating helpfull answers is nice, but saying thanks can be even nicer.
|
|
|
|
|
Hello,
I want to know datatype for "this" pointer in C++.
Can you explain with small example.Abhijit
|
|
|
|
|
There are two ways to look at it:
1. this is a pointer and all pointers are of type ptrdiff_t.
2. Since this is defined for a particular class, its type is the pointer to that class.
-Saurabh
|
|
|
|
|
Your #2 is right. I'm afraid you fell asleep while typing your #1. ptrdiff_t is the type for the difference between 2 pointers. No pointers are themselves of type ptrdiff_t. Please do not read this signature.
|
|
|
|
|
Yes any pointer except class-function-pointers can be saved in prtdiff_t type. It is 32-bits on 32-bit machine and 64-bit on 64-bit machine. Don't let them diff in type confuse you. Check the following articles.
About size_t and ptrdiff_t[^]
http://www.viva64.com/terminology/ptrdiff_t.html[^]
If you don't believe them then here are the definitions from crtdefs file:
#ifndef _INTPTR_T_DEFINED
#ifdef _WIN64
typedef __int64 intptr_t;
#else
typedef _W64 int intptr_t;
#endif
#define _INTPTR_T_DEFINED
#endif
#ifndef _PTRDIFF_T_DEFINED
#ifdef _WIN64
typedef __int64 ptrdiff_t;
#else
typedef _W64 int ptrdiff_t;
#endif
#define _PTRDIFF_T_DEFINED
#endif
As you can see, intptr_t and ptrdiff_t are defined identically.
-Saurabh
|
|
|
|
|
Well that's three people who got it wrong. ptrdiff_t is an integral value used to store the difference between two pointers. While you can store a pointer (by casting) in such a variable that is not the same as saying that the datatype of this is ptrdiff_t . The datatype of this is always pointer to the instance of the class in which it is used.txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
Richard, being one of the three posts leading up to yours ( and having gotten a 1 vote ) are you saying that I got it wrong? If so, I don't understand as we were both saying the same thing. Specifically:
ptrdiff_t is the type for the difference between 2 pointers. No pointers are themselves of type ptrdiff_t.
and refering to Saurabh's post
this ... , its type is the pointer to that class.Please do not read this signature.
|
|
|
|
|
Sorry no, I was not challenging your comments, with which I obviously agree; nor did I 1-vote you. I was alluding to the comments in Saurabh's post (and the linked articles) that there was not much difference between pointers and ptrdiff_t types. txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
I didn't think you were the 1-voter, but I was puzzled by who the "3 people" were. I didn't think of the 2 links. BTW, the two links are evidently 1 person. The article linked to on CP also appears on the business website linked to. Please do not read this signature.
|
|
|
|
|
It's type is a pointer to the class in which you are using it. Suppose you are using the this keyword inside a method of the CMyClass class, then its type will be CMyClass* .
|
|
|
|
|
It is a pointer to the current instance of the class, e.g.
class A
{
int a;
public:
A(int a)
{
this->a = a;
}
};
so it's type depends on the class, as for class A , it is A * .
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
The static definition for "this" is "pointer to the in-scope class type", hence CPallini sample, above.
The "runtime" type it refers to, may be different: typeid(*this) is the "actual type", and may be a derived class, if *this is polymorphic.
2 bugs found.
> recompile ...
65534 bugs found.
|
|
|
|
|
I'll add the point that the "this" pointer is non-modifiable. (The pointer, not the object.)
Its type is also impacted by whether the member function you are talking about is const or volatile.Please do not read this signature.
|
|
|
|
|
OK, why the 1 vote when all that I said is in the standard?
Explicitly:
C++ standard 9.3.2.1:
In the body of a nonstatic member function, the keyword this is a non-lvalue expression whose value is the address of the object for which the function is called. The type of this in a member function of a class X is X*. If the member function is declared const, the type of this is const X*, if the member function is declared volatile, the type of this is volatile X*, and if the member function is declared const volatile, the type of this is const volatile X*.Please do not read this signature.
|
|
|
|
|
If your class is T then the type of 'this' pointer would be T * const this;. i.e; 'this' pointer would be a constant pointer to the class T.
If there is a const member function in T, then 'this' pointer inside that member function would be of type const T * const this;
|
|
|
|
|
hi to all
i have this problem with win32 code. vc++ console based application.
i have a module...where some inputs/messsages keeps coming.....what I want is to....wheneerv a message comes i want to put in a queue..and the reciever function returns the control...now i want to have a thread, which will keep looking onto the queue...if empty, do nothing....if not empty then process the message.... (reason : main reason to do this is...instead of having the while loop in the thread function, which will eat CPU cycle, i want some mechanism to do task only when needed)...
please give me some solution to the problem....or is there anything(funtion/concept) available in win32 (vc++)...
all i need to do is prcess the messages when queue is not empty, otherwise do nothing...
thnaks in advance
|
|
|
|
|
What about documentation: "Multithreading with C and Win32"?
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
hrishi321 wrote: wheneerv a message comes i want to put in a queue..and the reciever function returns the control...now i want to have a thread, which will keep looking onto the queue...if empty, do nothing....if not empty then process the message....
That's what the UI thread does (if you're using MFC).
hrishi321 wrote: main reason to do this is...instead of having the while loop in the thread function, which will eat CPU cycle, i want some mechanism to do task only when needed)...
WaitForSingleObject[^] could help you do this.
A queued event thread is fairly easy to implement if you're not using MFC as well. All you need is a thread, a message queue and a couple of events that signals if there's more messages to be processed and if the thread should stop execution immediately (app shut down) and a WaitForSingleObject (or multiple objects, depending on how you do it) call that would be used for waiting on the said events.
What have you thought of to solve this?
“Follow your bliss.” – Joseph Campbell
|
|
|
|
|
Hi!
I have class called CSortedList. I need to implement their member functions using Linked List. I've tried implementing some functions. I am totally lost about the linked list. Can someone please help me out, it would be greatly appreciated. Please point out if I am doing something wrong. I have two files which I am going to post. The first file is CSortedListLLStarterKitSpring2010.cpp and the second file would be CSortedList.h
#include <iostream>
#include <cstdlib>
#include "CSortedList.h"
using namespace std;
void DisplayMenu(void);
void DisplayList(const CSortedList &list);
void FlushInstream(istream &inStream = cin);
int main(void)
{
auto bool bLoop = true;
auto char selection;
auto CSortedList myList;
auto int intVal;
do
{
DisplayMenu();
cout << "Please enter a selection: ";
cin >> selection;
switch (toupper(selection))
{
case 'A':
cout << "Please enter a value to add to the list: ";
if (!(cin >> intVal))
{
cout << "Error reading int, please try again...\n";
FlushInstream();
}
else
{
myList.InsertItem(intVal);
}
break;
case 'R':
cout << "Please enter a value to remove from the list: ";
if (!(cin >> intVal))
{
cout << "Error reading int, please try again...\n";
FlushInstream();
}
else
{
myList.RemoveItem(intVal);
}
break;
case 'D':
cout << "Here is the current list:\n";
DisplayList(myList);
cout << endl;
break;
case 'Q':
bLoop = false;
break;
default:
cout << "Unrecognized selection; please try again...\n";
FlushInstream();
break;
}
cout << endl;
} while (true == bLoop);
return 0;
}
void DisplayMenu(void)
{
cout << "A)dd an item\n";
cout << "R)emove an item\n";
cout << "D)isplay the list\n";
cout << "Q)uit\n";
}
void DisplayList(const CSortedList &list)
{
auto int index;
auto ListItemType listname;
for (index = 0; index < list.GetNumItems(); ++index)
{
list.GetListItem(index, listItem);
cout << listItem << endl;
}
}
void FlushInstream(istream &inStream)
{
auto int inChar;
inStream.clear();
while (false == inStream.eof())
{
inStream.get(inChar);
if ('\n' == inChar)
{
break;
}
}
}
#ifndef CSORTED_LINKED_LIST_HEADER
#define CSORTED_LINKED_LIST_HEADER
#define DEBUG_LIST
typedef int ListItemType;
struct ListItemNode
{
ListItemType value;
ListItemNode *next;
};
enum ListRetVal
{
LIST_FULL
, LIST_EMPTY
,LIST_ERROR
,LIST_SUCCESS
,LIST_INVALID_INDEX
,LIST_DUPLICATE
,LIST_NOT_IN_LIST
};
class CSortedList
{
public:
CSortedList(void) { m_headPtr = NULL; m_numItems = 0; }
CSortedList(const CSortedList &object);
~CSortedList(void) { DestroyList(); }
ListRetVal CreateList(void);
void DestroyList(void);
void DispRetVal(const char* szMessage, ListRetVal value) const;
ListRetVal GetListItem(int index, ListItemType &item) const;
int GetNumItems(void) const { return (m_numItems); }
ListRetVal InsertItem(const ListItemType &newItem);
bool IsListFull(void) const { return (NULL == m_headPtr); }
bool RemoveItem(const ListItemType &targetItem);
CSortedList& operator = (const CSortedList &rhs);
private:
int CopyList(const CSortedList &otherList);
ListItemNode *m_headPtr;
int m_numItems;
};
#endif //CSORTED_LINKED_LIST_HEADER
void DispRetVal(const char* szMessage, ListRetVal value) const
{
#ifdef DEBUG_LIST
cerr << szMessage << ": ";
switch (value)
{
case LIST_Full:
cerr << "LIST_FULL\n";
break;
case LIST_EMPTY:
cerr << "LIST_EMPTY\n";
break;
case LIST_ERROR:
cerr << "LIST_ERROR\n";
break;
case LIST_SUCCESS:
cerr << "LIST_SUCCESS\n";
break;
case LIST_INVALID_INDEX:
cerr << "LIST_INVALID_INDEX\n";
break;
default:
cerr << "Unrecognized error code\n";
break;
}
#endif
}
|
|
|
|
|
I would recommend using the STL list class.
|
|
|
|
|
I can't because this is for my class that I am taking. It's data structures in C++.
|
|
|
|
|
Shah Ravi wrote: I've tried implementing some functions.
I don't see what you have tried for any of the member functions of your Sorted List class, except for DispRetVal. You might want to pick one that you had trouble with, post it, and indicate what problem you are having with it. If you are really lost, first review your notes/textbook about what a linked list is and think about what sorted means.
Regarding your DispRetVal() member function implementation attempt:
1) This belongs in your CSortedList.cpp file, not a header file.
2) In the function definition you need to qualify the function name with the name of the class that it is a part of.
I have looked at the functions that you have written to test your class once you get it written. This is a good thing to do. I see at least one problem that should generate a compiler error. Attempt to compile and clean up the compiler errors. (Ignore linker errors until you get the rest of it written.)
You are currently ignoring return codes from the member functions. You will want to change that.
There are also a number of style issues, but I'll skip those for now.
It looks like you are going to have to roll up your sleeves and get to work.Please do not read this signature.
|
|
|
|
|
Thanks,friends
I loaded 3ds model
But,I have problem :I load 3 file 3ds by glPush...,glMatrix,glTranlated.
desc:
man_3 table_2 floor_1
When i rotate man 3-> normal
When i rotate table 2-> man 3 rotate
When i rotate floor 1->man & table rotate,my gold
This is rotate hand,leg.I want to rotate table then man 3 not rotate,rotate floor 1 then man & table not rotate
thanks
I don't know I not find load animate of 3ds
Thanks
Tuan,College 8,vietnam
|
|
|
|
|
Can you try to make you question clearer? As of now I have no idea what you are trying to say.
-Saurabh
|
|
|
|
|
You might have better luck in the graphics forum but it's been kind of quiet in there lately. You measure democracy by the freedom it gives its dissidents, not the freedom it gives its assimilated conformists.
|
|
|
|