|
This is encapsulation of a. It's at the very heart of OO. The idea is that you don't expose a member variable of a class directly to the class client, but encapsulate the access to the variable.
As a reference in essense is just short-hand for a dereferenced pointer, your putint function actually returns the adress of a. So putint()=30 is the very same as a=30.
A more used form of encapsulation is the use of accessor functions. Say you have this class
class myClass
{
private:
int a;
public:
int GetA() {return a}
void PutA(int thevalue) {a=thevalue}
}
(I've omitted all semicolons here because I suspect they will be translated into smileys!)
The idea is that users of this class have no direct access to a as it is declared private. To get the value of a you'd call GetA, to set it you'd call PutA. As you can see, this PutA and your putint() has the same functionality, the difference being that putint is a lvalue while PutA is a rvalue.
The advantage of encapsulation is that you can change the way "a" is implemented without changing the code that uses a. Say that you'd want to implement a as a double instad of an int, you rewrite your class to this:
class myClass
{
private:
double a;
public:
int GetA() {return (int)a}
void PutA(int thevalue) {a=(double)thevalue}
}
The user of myClass won't even know that a has another type.
Hope this helps.
Cheers
Steen.
"To claim that computer games influence children is rediculous. If Pacman had influenced children born in the 80'ies we would see a lot of youngsters running around in dark rooms eating pills while listening to monotonous music"
|
|
|
|
|
Just so you know, this code is broken:
int& func1(int* myref)
{
int int_temp;
int_temp = *myref;
return int_temp;
} Notice what is being referenced by the return value - int_temp . Once the function returns, that variable goes out of scope and is destroyed, so the reference that gets returned no longer references valid memory. The code may not crash, but you'll get unexpected behavior when you use the reference.
--Mike--
http://home.inreach.com/mdunn/
A recent survey reports that 1/4 of all internet users in England surf for porn.
The other 3/4 just didn't want to admit it.
|
|
|
|
|
Thanks you Mike...
Because stack frame cleared after out of scope. Am i correct?
|
|
|
|
|
Not physically cleared out, but any stack variables are destroyed and that memory is free to be reused in other function calls.
--Mike--
http://home.inreach.com/mdunn/
A recent survey reports that 1/4 of all internet users in England surf for porn.
The other 3/4 just didn't want to admit it.
|
|
|
|
|
Hi,
For more info on pointers (althought not references), see A Beginner's Guide to Pointers.
Hope that's helpful,
> Andrew
"Do you like my mask, it raises the dead...!"
-- Buffy (season 3, Giles)
|
|
|
|
|
Sorry for the simplicity of this question...but I was wondering how you make sure that certain Edit Control on a dialog box shows the cursor, so the user would not have to click on the edit box.
|
|
|
|
|
Create a member variable for the CEdit control (m_edMyEdit) and in the OnInitDialog function :
m_edMyEdit.SetFocus();
...
return FALSE;
make sure you return FALSE or else it doesn't matter what you set the focus to.
Bret Faller
Odyssey Computing, Inc.
|
|
|
|
|
Hi
Does anybody know how to have indexes of first and last visible columns of list control at any time?
I'm using VLC and its custom drawing and I have huge number of columns.
The problem is that VLC sends CuastomDraw notofication for the columns which are not visible. And it really slows down my drawing performance.
As far asI understood theris no way to prevent those notifications for hidden subitems.
So the only way is to have those 2 indexes and every time draw notifocation comes to check whether to draw that item or no.
Thanks
Vigen
|
|
|
|
|
I don't know about such a functionality. You may try LVM_GETSUBITEMRECT (or CListCtrl::GetSubItemRect) instead.
Tomasz Sowinski -- http://www.shooltz.com
|
|
|
|
|
When I resize my sdi app to a size smaller than the view template, I get scoll bars. How can I make the view resize with it, so I don't see scroll bars?
|
|
|
|
|
i think you are using a CScrollView.. you can use the CScrollview::SetScaleToFitSize(SIZE new_size) All you have to do is to give in the new size of the window
for more informations in how to use this.. contact msdn.. or ask me..
|
|
|
|
|
I have an sdi app, that has no document. I probably could have created my app as dialog based. Anyway, my app is just about finished (so I don't want to go back and make it dialog based) and my window title always says "Untitled - [my app name]". How can I get rid of the "Untitled".
Thanks, John.
|
|
|
|
|
Add this to PrecreateWindow in Mainframe
cs.style &= ~(LONG) FWS_ADDTOTITLE;
Christian
As I learn the innermost secrets of the around me, they reward me in many ways to keep quiet.
Men with pierced ears are better prepared for marriage. They've experienced pain and bought Jewellery.
|
|
|
|
|
Use the api SetWindowText(..)
|
|
|
|
|
the following code causes a break in a debugging session to a user breakpoint and then shows a memory leak.
CString *temp;
temp = new CString();
delete temp;
I actually boiled it down to that. Any idea what's wrong? Should I just not create pointers to CString objects? Major thanks in advance
--
Peace,
Amit Jain
|
|
|
|
|
do:
pTemp = new CString;
no parenthesis.
-c
------------------------------
Smaller Animals Software, Inc.
http://www.smalleranimals.com
|
|
|
|
|
No go I get the same errors...
Thanks for trying though
--
Peace,
Amit Jain
|
|
|
|
|
This works for me just fine:
CString* lpszMyString = new CString;
delete lpszMyString;
Bret Faller
Odyssey Computing, Inc.
|
|
|
|
|
You're right, it should work perfectly, I have absolutely no idea why it doesn't work for me
--
Peace,
Amit Jain
|
|
|
|
|
I apologize, and I thank those who answered. The problem turned out to be a with the project file... Deleting and recreating it eliminated the problem.
--
Peace,
Amit Jain
|
|
|
|
|
I'm trying to use Direct Input 8 to navigate my SpaceShip. But I cant get DirectInput 8 to work. I read the whole Tutorial about Keyboard inputs that comes with the DirectX8 Docs, Heres the Code!
To Int the DirectInput Object i did:
-----------------------------------------------------
//Put this in WinMain()
hr = DirectInput8Create(hInst, DIRECTINPUT_VERSION,
IID_IDirectInput8, (void**)&g_lpDI, NULL);
if FAILED(hr)
{
// DirectInput not available; take appropriate action
}
LPDIRECTINPUTDEVICE8 g_lpDIDevice;
hr = g_lpDI->CreateDevice(GUID_SysKeyboard, &g_lpDIDevice, NULL);
if FAILED(hr) {
DI_Term();
return FALSE;
}
hr = g_lpDIDevice->SetDataFormat(&c_dfDIKeyboard);
if FAILED(hr) {
DI_Term();
return FALSE;
}
// Set the cooperative level
hr = g_lpDIDevice->SetCooperativeLevel(hWnd,
DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
if FAILED(hr) {
DI_Term();
return FALSE;
if (g_lpDIDevice) g_lpDIDevice->Acquire();
}
no Compile Error!
A function to check if the key is pressed.
----------------------------------------
void WINAPI ProcessKBInput()
{
#define KEYDOWN(name, key) (name[key] & 0x80)
char buffer[256];
HRESULT hr;
PlayerX++;
hr = g_lpDIDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);
if FAILED(hr)
{
// If it failed, the device has probably been lost.
// Check for (hr == DIERR_INPUTLOST)
// and attempt to reacquire it here.
return;
}
// Turn the spaceship right or left
if (KEYDOWN(buffer, DIK_RIGHT))
{
PlayerX++;
}
}
No Compile error
But I need some way to execute the function, and in the Documents that MicroSoft released, there was no example
I tried to put ProcessKBInput();
in my ProcessNextFrame(); function.
no compile error, but my program crashes every time i ran it. No error message just turns black for a few seconds and then back to windows!
Hope any one get an ideer what my problem is.
Thanks
PS: Am not a super programmer so dont taunt me if its a easy thing to fix, okay?
|
|
|
|
|
If you're getting a super frame rate, calling this function when you draw a frame could mean it's getting called a LOT. I don't see any problem with your code, but what you should do is use timeGetTime() to track how long it's been since you last checked key status, and move your ship by an amount that takes this into account. Otherwise the movement speed will be erratic depending on your frame rate, and different from one machine to the next. The same is true of all movement that occurs.
Does your program draw OK if you DON'T check the keyboard input ? I'd be checking other areas, and for the crash ( have you gone into the debugger to see *where* the crash is occuring ), I'd make sure that you've not got values spiralling out of control somewhere.
Christian
As I learn the innermost secrets of the around me, they reward me in many ways to keep quiet.
Men with pierced ears are better prepared for marriage. They've experienced pain and bought Jewellery.
|
|
|
|
|
I tried to run my Program in Debuged mode, the program didnt crash, it just turned white!! I couldnt close it! I restarted my Computer...
If I remove the ProcessKBInput(); My Program runs fine.
if i create a simple keyboard input for windows
like:
case IDM_DOWN:
ProcessKBInput();
return 0L;
and put my ProcessKBInput(); in it, it runs, but if I hit the key that will execute ProcessKBInput my program will crash with no error message!
So I think that it is my ProcessKBInput Function that has the flaw!
|
|
|
|
|
So.. i need to send from VB6 a STRUCTURED ARRAY into a VC++ DLL!!
i just prepared this 2 file:
VB6 EXE FILE
------------
public type secondarr
value1 as long
value2 as long
end type
publit type strarr
superarr() as secondarr
value3 as long
end type
Private Declare Function tryout Lib "<myc++lib>" (Byref PArr as strarr) as long
public sub PassArray()
dim myarr(0) as starr
redim myarr(0).superarr(0)
myarr(0).value3=3
myarr(0).superarr(0).value1=1
myarr(0).superarr(0).value2=2
msgbox tryout(myarr(0))
end sub
VC
----
[this is a Dynamic-DLL]
[....]
//only function and struct here
[in h]
struct secondarr
{
int value1;
int value2;
};
struct strarr
{
secondarr* superarr;
int value3;
};
[in cpp]
int tryout(strarr * myarr)
{
return strarr[0].superarr[0].value1; // <-- don't work
return stratt[0].value3; // <-- work correctly...
};
...................
so where is the problem????
i need to read a substructired array but... in this case i only operate on first level of array....
any one has other solution???????
thx....
|
|
|
|
|
Hi,
I created a dialog based application with two ActiveX controls on it, one is placed on the dialog resource and the other is created using the Create(...) function. When I run the application on Win98 it works fine, if I run it on Win2000 it doesn't work at all. I stepped into the code on both machines and found that the Win2000 machine hangs on line 326 of DLGCORE.CPP
hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
pParentWnd->GetSafeHwnd(), AfxDlgProc);
As I was tracing through the code, it looks like all the correct variables are loaded but it always just stops on that line of code, no return, no nothing.
Does anyone know of any steps I can take to try and find out why this is happening?
Thanks in advance,
Craig
|
|
|
|