|
If you are placing a rich edit control in your dialog, you have to call, AfxInitRichEdit()[^] in the InitInstance() function of you app class.
|
|
|
|
|
Hi! Thanks for helping me. I need to write a program (in C++) that reads the file Employee.dat as input and then outputs to 4 different files which are Managers.dat, Marketing.dat, Developers.dat, and Testers.dat. Each of the output files contains the name of the employees of its category.
The fle Employee.dat contains following data:
Sue Leon 4
Robert Wise 3
Sam Woo 1
Nathan White 3
Suzan Head 2
Henry Williams 4
Christine Mint 1
Kim Leeds 4
Elton Sue 3
Ken Latch 2
I tried to write the program but I don't know what to put in "SWITCH" loop. Here is what i have so far.
#include <iostrean>
#include <fstream>
#include <cstdlib>
#include <string>
using namespace std;
int main()
{
ifstream in_stream;
ofstream out_stream;
in_stream.open("Employee.dat");
if (in_stream.fail())
{
cout << "Input file failed to open.\n";
exit(1);
}
out_stream.open(("Managers.dat", ios::app), ("Marketing.dat", ios::app), ("Developers.dat", ios::app), ("Testers.dat", ios::app);
if (out_stream.fail())
{
cout << "Output file failed to open.\n";
exit(1);
}
string first_name, last_name;
enum department { Managers = 1, Marketing = 2, Developers = 3, Testers = 4 };
im_stream >> first_name >> last_name >> department;
while (!in_stream.eof())
{
switch (department)
{
number '1';
out_stream << "
|
|
|
|
|
Shah Ravi wrote: #include <iostrean>
Are you receiving a preprocessor error with this one?
Shah Ravi wrote: out_stream.open(("Managers.dat", ios::app), ("Marketing.dat", ios::app), ("Developers.dat", ios::app), ("Testers.dat", ios::app);
...
im_stream >> first_name >> last_name >> department;
Or a compiler error with these?
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
No, I haven't finished writing program yet. Could you please read the code and tell me what to write in SWITCH loop. Should I use cout or ofstream? Thank you so much for replying.
|
|
|
|
|
Shah Ravi wrote: Could you please read the code and tell me what to write in SWITCH loop.
See here.
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
I would like to ask how to detect application/windows scripts on load.
for example my program would detect if someprogram.exe is loading..
thank you.
|
|
|
|
|
you'll have to take a snapshot of every process, every second (or a time you decide), and compare with the old snapshot to see if you find a new process.
you can try hooking the api that opens the processes to watch it, but it's somehow expensive to develop... there's the oportunity to write a kernel module and watche the processes memory pages, that is more expensive yet...
i don't really much more clues on how to do it, but there are books that goes deep on theese subjects such as "Windows Rootkits: Subverting the windows kernel" and such.
|
|
|
|
|
A tab control with several tabs was set up on a dialog based project. Everything works fine in switching from tab to tab, but what I would like to do is have a configuration file selected and displayed in the first tab, and then displayed in an edit box in the second tab right after it is displayed.
How does one get the edit box to initialize in the second tab? The OnInitDialog only works when the dialog comes up. Is there a similar function that can be invoked when switching from tab to tab?
Thanks.
|
|
|
|
|
I think you need to override OnSelchange() function.
Refer here:CTabCtrl usage[^]
--
"Programming is an art that fights back!"
|
|
|
|
|
OnSelchange()was in a mytabctrl class for handling the tabs. While in it, I could display an AfxMessageBox("tab2") in the correct tab, but couldn't access any of the edit boxes that were associated with that tab. What I did was send a message from OnSelchange(), and then in the tab2 dialog use
CTab2::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) to trap the message and initialize within the tab2 class.
It works OK, but seems like there ought to be means of directly accessing the tab2 class from within the mytabctrl class.
Thanks for the link. I'll download the file and dig in to it later this evening.
|
|
|
|
|
hello
I Have a Question....
how to writing a Program that analyze pic 2 and arrange or place pic1 into pic2
better analyze
link pic1:<<>
link Pic2:<<http://i25.tinypic.com/2a604nn.jpg>>
pleas help me
hi......
modified on Sunday, July 6, 2008 5:09 PM
|
|
|
|
|
rahzani wrote: What write a Program that can the object or picture similar object1...that can been minimize space of object2 .
Incoherency at its best.
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
i'm sorry
i cant writing english.
my question is editing........
help me for this program......
hi......
|
|
|
|
|
rahzani wrote: i'm sorry
i cant writing english.
my question is editing........
help me for this program
I am sympathetic to your problem with english. Unfortunately, before we all start giving arbitrary answers, it would be helpfull if we had an idea what the nature of the question is.
Regards,
Bram van Kampen
|
|
|
|
|
i'm sorry
i cant writing english.
my question is editing........
help me for this program......
hi......
|
|
|
|
|
"Editing" is a rather broad field. You'll have to more specific to have any hope of getting useful advice.
Steve
|
|
|
|
|
URGENT!!! I have a problem. Please post the solution.
Steve
|
|
|
|
|
I am having a difficult time understand what is really happening when I overload an operator for a class. Here is my class declaration. CC is short for CCarteseanCordinates.
class CC
{
public:
CC(void);
~CC(void);
CC operator+( CC &source );
double Query_X();
double Query_Y();
double Query_Z();
void Set_X( double value );
void Set_Y( double value );
void Set_Z( double value );
protected:
double X;
double Y;
double Z;
};
Attempting to follow format of the example in the book I have, the definition of the + operator overload is:
1 CC CC::operator+( CC &source )
2 {
3 CC result = *this;
4 double sum = source.Query_X() + X;
5 result.Set_X( sum );
6
7
8 return result;
9 };
Line 3 starts with
CCarteseanCordinates result
Which seems to create a local object of type CCarteseanCordinates.
Now adding on the = *this;, the line now seems to say assign to that object the value of the local this pointer.
That is similar to writing
Int y;
Int *z = &y;
Int x = *y
Except: The equal operator has not been overloaded so
Object1 = object2;
Is not a valid construct.
Should my declaration really be something like:
CC operator+( CC &source1, CC &source2 );
What is really going on here, and what should be going on?
Lets ignore the friend operator for the moment.
Thanks for your time
|
|
|
|
|
In a class Constructor, Copy Constructor and assignment operator are automatically generated by compiler if needed.
First and most important is the definition of operator. You should understand that operator is nothing by a function. So for CC class if you write a = b + c, where a, b, and c are objects of type CC, what it really means is a = b.operator+(c). Does this makes sense?
Another this is there is no need to use functions to access variables within the class. You can do this as:
CC CC::operator+(CC &source)
{
CC result = *this;
result.X += source.X;
result.Y += source.Y;
result.Z += source.Z;
return result;
}
Hope this helps.
-Saurabh
|
|
|
|
|
RE: what it really means is a = b.operator+(c).
No, I am missing several things here.
Lets skip around a bit. First + (the plus symbol) is a binary operator as in:
int a, b, c;
a = b + c;
That means it has two arguments. To write this in the form of a function we would use the format:
result = add( y, z );
So there should be two arguments in the declaration. But when I write this in the dot h file:
CC operator+( CC &source1, CC &source2 )
The compiler says:
error C2804: binary 'operator +' has too many parameters
That seems to be in direct contradiction of the form:
a = b + c;
The addition operator has three variables, one left and two right.
As the values are being put in x, and read from y and z, it seems that the function is being run from the perspective of object x.
What am I missing?
I have another question, but lets take this one point at a time.
Thanks for your time
|
|
|
|
|
bkelly13 wrote: That means it has two arguments
Yes, it is just written down differently.:-
a=b.operator+(c); The First argument is the object carrying out the addition, the second argument is the item being added. I.E. the Operator+ MEMBER FUNCTION adds a value to the object from which it is called, and passes the result, without modifying itself,
The form c=add(a,b) is typically a global addition function.
Answers to the other issues you raised follow directly when you grasp the concept of the above.
Regards
Bram van Kampen
|
|
|
|
|
RE: So for CC class if you write a = b + c, where a, b, and c are objects of type CC, what it really means is a = b.operator+(c). Does this makes sense?
NO, it really does not make sense. The value being written is going into object a and the function should be called from the perspective of object a. To operate from the b perspective is counter-intuitive and just flat bad design. If we follow this up logically, a unary operation such as += should have one less argument, or zero arguments. However, that’s not my call so I had best learn to deal with it.
Regardless, lets see where this goes. The declaration looks like:
CC operator+( CC &source1 );
And the code looks like:
CC CC::operator+( CC &source1)
{
CC result = *this;
double sum = source1.X + X;
result.X = sum ;
return result;
};
And if I follow what your write, which is not certain, the code is executed from the perspective of object b. As I did not include the qualification “friend” in the declaration, code running from b does not have access to private variables in object a or in object c. That means that I should not have direct access to result.X or source1.X. So how can the compiler accept this code without error? It should force me to write:
double sum = X + source1.Get_X();
result.Set_X = sum;
in the first line, X is from the b object, source1.Get_X() gets the value from the c object, and in the third line result goes to the a object.
Given that the perspective is as you noted: a = b.operator+(c), why does the function have direct access to private members in objects a and c?
Although I have not yet figured this out, thank you for taking the time to respond.
Thanks for your time
|
|
|
|
|
I think the biggest thing you are missing is that member functions of a class have full access to all member variables. It doesnt matter which object called the function, all objects of that class can access private members in a member function of same class. Lets take an example
class Foo
{
private:
int x;
public:
Foo(int _x)
{
x = _x;
}
inline int AddX(const Foo& B)
{
return x + B.x;
}
};
Now you might think that it is a bad design to make private variable accessible - A can access B' x and vice-versa. But that is not the case. Why is it so? Because access modifies are for the classes which use this class. So for example if you want to hide member variables from other classes you will use private. These member variable will still be visible within the class definition.
Now lets see if this was not the case. Then you must have a public function to set and get value for every private variable. Well in this case the private variables are as good as public variables. Does this make sense?
Okay this is c++ side of the explanation. Lets work on intuition of how a = b + c should work. In the class definition I gave above I can do the following.
Foo f1(10);
Foo f2(2);
int y = f1.AddX(f2);
Look at it carefully it has, mathematically, same structure as a = b + c. But will you in this case say that since y is the return value the function should be called in perspective of y? And AddX should have two arguments instead of one? I hope answer to these questions in no. Now lets see how to read a = b + c in terms of c++ -> call b's member function operator+ with a single argument c and return a value a. In simpler words a = b.operator+(c). Now since a, b, and c are objects of same class the function operator+ (which is member of same class) have full access to class data. If we add operator+ to Foo it will look like.
class Foo
{
private:
int x;
public:
Foo(int _x)
{
x = _x;
}
inline int AddX(const Foo& B)
{
return x + B.x;
}
Foo& operator+(const Foo& B)
{
Foo a;
a.x = x + B.x
}
};
Only differece unary operator+ has is that it operates on same object which calls the function instead of creating a new one.
Foo& operator+(const Foo& B)
{
x = x + B.x;
return *this;
}
I hope this makes things a bit clearer now.
-Saurabh
|
|
|
|
|
After posting I realized that another example might make thinks more clearer.
class Foo
{
public:
Foo(int _x)
{
x = _x;
}
Foo& Add(const Foo& B)
{
Foo a;
a.x = x + B.x;
return a;
}
private:
int x;
};
Foo a(10);
Foo b(20);
Foo c = a.Add(b);
Now instead of Add using operator and then imagine that compiler cannot see operator word in the code using this class. You will get.
class Foo
{
public:
Foo(int _x)
{
x = _x;
}
Foo& operator+(const Foo& B)
{
Foo a;
a.x = x + B.x;
return a;
}
private:
int x;
};
Foo a(10);
Foo b(20);
Foo c = a.opeator+(b);
Foo d = a + b;
You must try to run this second example. Foo c = a.opeator+(b) is a valid c++ code and will compile just fine. b + c is provided for convenience which is automatically converted by compiler to b.operator+(c).
-Saurabh
|
|
|
|
|
Hi,
CC result= *this;
does not create anything; it declares a reference called result to a type CC and sets it equal
to *this, so now result and this are one and the same object.
IMO it was not really necessary; there must be a way to do *this.Set_X(sum) directly)
in your line 5.
modified on Sunday, July 6, 2008 5:31 PM
|
|
|
|