|
Thread Rules 1. This is not a "do my homework for me" thread. If you have specific questions, ask, but don't post an assignment or homework problem and expect an exact solution. 2. No recruiting for your cockamamie projects (you won't replace facebook with 3 dudes you found on the internet and $20) 3. If you can't articulate why a language is bad, don't start slinging shit about it. Just remember that nothing is worse than making CSS IE6 compatible. 4. Use [code] tags to format code blocks. |
On April 25 2011 10:44 HowitZer wrote:Show nested quote +On April 25 2011 10:34 freelander wrote: what should I learn to be a webprogrammer?
I have C++, Java, and some script languege knowledge (python, lua) no php though Try out Visual Web Developer by Microsoft. It's a free integrated development environment for developing asp.net applications. The backend code can be written in C# which is quite a bit like C++. ASP.NET is a very powerful tool for developing web applications. Remember that everything on the web ends up in html format.
You're best off learning a web framework, like Django (Python), Ruby on Rails, or ASP.NET (etc). I personally work with Rails and definitely recommend it, but there are of course many good options out there. Basically -> do your research -> pick a framework/language -> buy/read a recommended book/tutorial on it -> start building apps -> learn as you go (ask questions on irc/stack overflow/hacker news). Learning html/css and eventually javascript (probably in the context of jQuery) are of course musts. Django has excellent docs and Rails Tutorial is an excellent intro to Rails.
thanks guys
|
I'm having trouble debugging my javascript code. I downloaded firebug but cant get it to work
|
Why not just use chrome. It has a in build JS debugger.
|
Hi. So I'm learning C# and I need inspiration for a project. I'd like to get used to working with LINQ and extension methods, as well as general OOP stuff. So if anyone is taking OOP or C# classes I'd like to see some of the assignments!
|
On April 26 2011 11:31 FezTheCaliph wrote: I'm having trouble debugging my javascript code. I downloaded firebug but cant get it to work
Whats not working exactly? Should be as simple as download add-on for Firefox, restart the browser, open page, right mouse button -> inspect element. And you could indeed use Chrome but Firebug is supposed to work.
|
Having succeeded in emulating final classes in C++, I'm trying to do the same with final methods. I have a class template that has virtual constructor(s) and are friends with the base class (but not the subclass), and all I'm trying to do is to use it as a dummy parameter which the subclass can not pass by value, essentially forcing the method to have a different signature.
However I came across some bullshit. Anyone care to explain it?
+ Show Spoiler + #include <iostream>
using namespace std;
template <class T> class Final {
private:
Final (int) {} virtual ~Final () {}
class Wrapper { public: typedef T Type; };
friend class Wrapper::Type;
};
class Base { public: virtual ~Base () {} virtual int f (Final<Base> = 0) {return 1;} };
class Sub : public Base { public: virtual ~Sub () {} virtual int f (Final<Base> = 0) {return 2;} };
int main (int argc, char** argv) { if(argc||argv){} Base* base = new Base(); Base* sub = new Sub(); cout << base->f() << endl; cout << sub->f() << endl; }
c:\code\test>compile.bat
c:\code\test>main 1 2
|
+ Show Spoiler +
That might be it ^^
Edit: Now that I think about it more. Sub inherits from Base, so it doesn't give an error. However the sub pointer is stored in base. This would imply that it should use the base functionality and should therefor return 1. Hmm, any specific reason why you use new Sub() instead of Base()?
|
Fix'd, though the issue still stands, Sub shouldn't be able to initalize a Final<Base> as default parameter, since the constructor is private, as Base is the only friend.
Edit: By the way, the more I think about it, the clearer it becomes that it isn't possible to seal a method that was once declared virtual in any of the parent classes:
+ Show Spoiler + class Base { public: virtual ~Base () {} virtual int f () {return 1;} };
class Sub : public Base { public: virtual ~Sub () {} int f () {return 2;} // override, non-virtual // int f (int = 0) {return 2;} // do not override Base::f() but shadow it // int f (Final<Sub> = Final<Sub>()) {return 2;} // do not override Base::f() but shadow it in such a way to prevent subclasses from declaring a function with the same signature };
class Grandchild : public Sub { public: virtual ~Grandchild () {} virtual int f () {return 3;} };
Whatever you do in Sub, either you override or shadow or shadow and prevent methods with the same signature, it is not possible to prevent Grandchild from overriding Base::f(); i.e. you can't override and seal.
|
What about the comparisons.
+ Show Spoiler +
If I replace it for + Show Spoiler + I get the output
+ Show Spoiler +
So the code would be:
+ Show Spoiler +#include <iostream>
using namespace std;
template <class T> class Final { private: Final (int) {} virtual ~Final () {}
class Wrapper { public: typedef T Type; };
friend class Wrapper; };
class Base { public: virtual ~Base () {} virtual int f (Final<Base>* = 0) {return 1;} };
class Sub : public Base { public: virtual ~Sub () {} virtual int f (Final<Base>* = 0) {return 2;} };
int main (int argc, char** argv) { if(argc||argv){} Base* base = new Base(); Sub* sub = new Sub(); cout << base->f() << endl; cout << sub->f() << endl; }
I fixed some other stuff too that the compiler was whining about.
|
Uhm, I don't get it. In java every method is implicitly virtual so you need final to keep it from being virtual. In C++ you have to explicitly declare virtual so you can override them (in the polymorpic sense). So if you want the method to be "final" just don't make it virtual in the first place.
|
Whatever you do in Sub, either you override or shadow or shadow and prevent methods with the same signature, it is not possible to prevent Grandchild from overriding Base::f(); i.e. you can't override and seal.
So the way I look at it is, you want Base, Subs and maybe even Subs of that. You want to receive different values of each while still storing them in the same Wrapper?
What I would suggest you looking into is delegates for C++. It's not very elegant or anything but I think it might work better than this approach.
Basicly you create a static class with the 2 static functions representing your Base and Sub classes. Then in both of the classes you create a function-pointer (delegate). This delegate is then filled in within the constructor of the classes.
When you then call your function through the delegate it will be the right one. Hope it still makes sense and that I interpreted it correctly.
Gotta go now, i'll check back later
|
On April 27 2011 20:15 Kaiwa wrote: If I replace it for[...]
Nah, it won't work pointers. Final<Base>'s main use would be to allow access from Base, but forbid access from its subclasses (it befriends Base via the inner class, aka friend class Wrapper::Type). But it looks like the compiler either does not enforce visibility constraints when it checks default parameters (Final<Base> construction from int should be allowed only in Base), or something is in play here I don't know about.
On April 27 2011 20:28 japro wrote: Uhm, I don't get it. In java every method is implicitly virtual so you need final to keep it from being virtual. In C++ you have to explicitly declare virtual so you can override them (in the polymorpic sense). So if you want the method to be "final" just don't make it virtual in the first place.
It's not so simple. Once you declare a method virtual, it stays virtual, no matter if you declare it non-virtual in a subclass.
Kaiwa What I would suggest you looking into is delegates for C++. It's not very elegant or anything but I think it might work better than this approach.
Hmm this sounds promising, I'll check it out.
|
Frigo, why do you want final methods (or classes for that matter)? They smell like bad design a lot and that stuff doesn't belong to C++ (there's a reason it's not natively supported and isn't part of C++0x). I've never used them and never saw a reason to. In Java it seemed like another one of those obsolete safety features which enabled you to say to another programmer who is a potential evil villain and who is playing around with your classes: "Hey you idiot, don't override this method or you'll break something!".
Nobody should ever want to override methods of classes about which he doesn't know anything about anyways. And if you're using them yourself you should know what to override and what not to override anyways.
|
I'm having some strange trouble regarding a program I'm making. Everything runs fine when I start it in Eclipse, but when I make a runnable .jar file one of games won't start. Nothing crashes, no errors or any of that, just nothing happens.
I've checked it over several computers as well so it's not just me. What I was wondering though was if someone who runs OS X or linux would bother downloading the file, and making it into a .jar to see if it works there. Don't know any other way to look for what it can be, as this was the only thing I haven't been able to check of the things the lab engineer told me to try.
I would really appreciate if someone would bother to do this.
Download link to the .zip :linky
|
Does anybody want to work on a community website just like teamliquid.net but for Diablo 3?
I have domain name registered for the site. [modedit]
Contact me if you follow under these categories:
You love D3... You love designing website You are bored this summer You want to build a portfolio
Kudos ! WitchDoctor
User was warned for this post
|
Anyone know of a binding or library for sc2 replay parsing in ruby?
|
Could someone please help me out here? I'm a noob and I have a momentary lapse of reason right now as I can't for the life of me recall how to properly loop my program so it won't exit after one go (only when someone enters 0 in any case he's asked to enter input)... I don't need a ready solution, if you could just push me along by suggesting what should I use I'll be fine (I'm trying to learn some programming for personal uses mostly, like this dice throw generator here).
It's ANSI C if you can't tell.
+ Show Spoiler [code] + #include <stdio.h> #include <stdlib.h> #include <time.h>
struct DiceConfiguration { int DiceNumber; int DiceType; };
struct DiceThrowsResult { int DiceNumber; int Sum; int ThrowsResults[]; };
struct DiceConfiguration* GetConfiguration(void); struct DiceThrowsResult* ThrowDices(struct DiceConfiguration *config); int ThrowDice(struct DiceConfiguration *config); void PrintDiceThrowsResult(struct DiceThrowsResult *result);
int main(void) { srand((unsigned int) time(0)); // random seed struct DiceConfiguration *config; config = GetConfiguration(); struct DiceThrowsResult *result; result = ThrowDices(config); PrintDiceThrowsResult(result); free(config); free(result);
return 0; }
struct DiceConfiguration* GetConfiguration(void) { struct DiceConfiguration *config; config = malloc(sizeof(struct DiceConfiguration)); printf("Enter the number of dice: "); scanf("%d", &config->DiceNumber); printf("Enter dice type (sides) : "); scanf("%d", &config->DiceType); return config; }
struct DiceThrowsResult* ThrowDices(struct DiceConfiguration *config) { struct DiceThrowsResult *result; result = malloc(sizeof(struct DiceThrowsResult) + config->DiceNumber * sizeof(int)); result->DiceNumber = config->DiceNumber; for (int i = 0; i < config->DiceNumber; i++) { result->ThrowsResults[i] = ThrowDice(config); result->Sum += result->ThrowsResults[i]; } return result; }
int ThrowDice(struct DiceConfiguration *config) { return rand() % config->DiceType + 1; }
void PrintDiceThrowsResult(struct DiceThrowsResult *result) { for (int i = 0; i < result->DiceNumber; i++) { printf("%d ", result->ThrowsResults[i]); } printf("Sum: %d\n", result->Sum); }
|
On May 05 2011 03:26 Manit0u wrote:Could someone please help me out here? I'm a noob and I have a momentary lapse of reason right now as I can't for the life of me recall how to properly loop my program so it won't exit after one go (only when someone enters 0 in any case he's asked to enter input)... I don't need a ready solution, if you could just push me along by suggesting what should I use I'll be fine (I'm trying to learn some programming for personal uses mostly, like this dice throw generator here). It's ANSI C if you can't tell. + Show Spoiler [code] + #include <stdio.h> #include <stdlib.h> #include <time.h>
struct DiceConfiguration { int DiceNumber; int DiceType; };
struct DiceThrowsResult { int DiceNumber; int Sum; int ThrowsResults[]; };
struct DiceConfiguration* GetConfiguration(void); struct DiceThrowsResult* ThrowDices(struct DiceConfiguration *config); int ThrowDice(struct DiceConfiguration *config); void PrintDiceThrowsResult(struct DiceThrowsResult *result);
int main(void) { srand((unsigned int) time(0)); // random seed struct DiceConfiguration *config; config = GetConfiguration(); struct DiceThrowsResult *result; result = ThrowDices(config); PrintDiceThrowsResult(result); free(config); free(result);
return 0; }
struct DiceConfiguration* GetConfiguration(void) { struct DiceConfiguration *config; config = malloc(sizeof(struct DiceConfiguration)); printf("Enter the number of dice: "); scanf("%d", &config->DiceNumber); printf("Enter dice type (sides) : "); scanf("%d", &config->DiceType); return config; }
struct DiceThrowsResult* ThrowDices(struct DiceConfiguration *config) { struct DiceThrowsResult *result; result = malloc(sizeof(struct DiceThrowsResult) + config->DiceNumber * sizeof(int)); result->DiceNumber = config->DiceNumber; for (int i = 0; i < config->DiceNumber; i++) { result->ThrowsResults[i] = ThrowDice(config); result->Sum += result->ThrowsResults[i]; } return result; }
int ThrowDice(struct DiceConfiguration *config) { return rand() % config->DiceType + 1; }
void PrintDiceThrowsResult(struct DiceThrowsResult *result) { for (int i = 0; i < result->DiceNumber; i++) { printf("%d ", result->ThrowsResults[i] ; } printf("Sum: %d\n", result->Sum); }
So try making a loop inside main, around the function calls to ThrowDices() and PrintDiceThrowsResults(). Do you know the syntax for a while loop in C?
You will need to ask the user to if he wants to continue, and use this input as the condition in your loop. Take a try at this, and post back if you need help.
A basic loop could look like:
+ Show Spoiler + while (continue != FALSE) { doStuff(); doMoreShit();
continue = getContinue(); }
|
On May 05 2011 05:08 Pawsom wrote:Show nested quote +On May 05 2011 03:26 Manit0u wrote:Could someone please help me out here? I'm a noob and I have a momentary lapse of reason right now as I can't for the life of me recall how to properly loop my program so it won't exit after one go (only when someone enters 0 in any case he's asked to enter input)... I don't need a ready solution, if you could just push me along by suggesting what should I use I'll be fine (I'm trying to learn some programming for personal uses mostly, like this dice throw generator here). It's ANSI C if you can't tell. + Show Spoiler [code] + #include <stdio.h> #include <stdlib.h> #include <time.h>
struct DiceConfiguration { int DiceNumber; int DiceType; };
struct DiceThrowsResult { int DiceNumber; int Sum; int ThrowsResults[]; };
struct DiceConfiguration* GetConfiguration(void); struct DiceThrowsResult* ThrowDices(struct DiceConfiguration *config); int ThrowDice(struct DiceConfiguration *config); void PrintDiceThrowsResult(struct DiceThrowsResult *result);
int main(void) { srand((unsigned int) time(0)); // random seed struct DiceConfiguration *config; config = GetConfiguration(); struct DiceThrowsResult *result; result = ThrowDices(config); PrintDiceThrowsResult(result); free(config); free(result);
return 0; }
struct DiceConfiguration* GetConfiguration(void) { struct DiceConfiguration *config; config = malloc(sizeof(struct DiceConfiguration)); printf("Enter the number of dice: "); scanf("%d", &config->DiceNumber); printf("Enter dice type (sides) : "); scanf("%d", &config->DiceType); return config; }
struct DiceThrowsResult* ThrowDices(struct DiceConfiguration *config) { struct DiceThrowsResult *result; result = malloc(sizeof(struct DiceThrowsResult) + config->DiceNumber * sizeof(int)); result->DiceNumber = config->DiceNumber; for (int i = 0; i < config->DiceNumber; i++) { result->ThrowsResults[i] = ThrowDice(config); result->Sum += result->ThrowsResults[i]; } return result; }
int ThrowDice(struct DiceConfiguration *config) { return rand() % config->DiceType + 1; }
void PrintDiceThrowsResult(struct DiceThrowsResult *result) { for (int i = 0; i < result->DiceNumber; i++) { printf("%d ", result->ThrowsResults[i] ; } printf("Sum: %d\n", result->Sum); }
So try making a loop inside main, around the function calls to ThrowDices() and PrintDiceThrowsResults(). Do you know the syntax for a while loop in C? You will need to ask the user to if he wants to continue, and use this input as the condition in your loop. Take a try at this, and post back if you need help. A basic loop could look like: + Show Spoiler + while (continue != FALSE) { doStuff(); doMoreShit();
continue = getContinue(); }
You mean something like that?
+ Show Spoiler + while (DiceNumber > 0 && DiceType > 0) {
do stuff
}
Then the entire thing should become a while loop... The problem I'm facing right now is the right place to put the loop, as this while checks for 2 variables which should be assigned before the loop and it would be pointless to do this stuff over and over again with the same variables (infinite loop welcome to). My mind is completely empty right now, I need to think about it.
Edit: Nevermind, I think I got it.
|
On May 05 2011 05:44 Manit0u wrote:Show nested quote +On May 05 2011 05:08 Pawsom wrote:On May 05 2011 03:26 Manit0u wrote:Could someone please help me out here? I'm a noob and I have a momentary lapse of reason right now as I can't for the life of me recall how to properly loop my program so it won't exit after one go (only when someone enters 0 in any case he's asked to enter input)... I don't need a ready solution, if you could just push me along by suggesting what should I use I'll be fine (I'm trying to learn some programming for personal uses mostly, like this dice throw generator here). It's ANSI C if you can't tell. + Show Spoiler [code] + #include <stdio.h> #include <stdlib.h> #include <time.h>
struct DiceConfiguration { int DiceNumber; int DiceType; };
struct DiceThrowsResult { int DiceNumber; int Sum; int ThrowsResults[]; };
struct DiceConfiguration* GetConfiguration(void); struct DiceThrowsResult* ThrowDices(struct DiceConfiguration *config); int ThrowDice(struct DiceConfiguration *config); void PrintDiceThrowsResult(struct DiceThrowsResult *result);
int main(void) { srand((unsigned int) time(0)); // random seed struct DiceConfiguration *config; config = GetConfiguration(); struct DiceThrowsResult *result; result = ThrowDices(config); PrintDiceThrowsResult(result); free(config); free(result);
return 0; }
struct DiceConfiguration* GetConfiguration(void) { struct DiceConfiguration *config; config = malloc(sizeof(struct DiceConfiguration)); printf("Enter the number of dice: "); scanf("%d", &config->DiceNumber); printf("Enter dice type (sides) : "); scanf("%d", &config->DiceType); return config; }
struct DiceThrowsResult* ThrowDices(struct DiceConfiguration *config) { struct DiceThrowsResult *result; result = malloc(sizeof(struct DiceThrowsResult) + config->DiceNumber * sizeof(int)); result->DiceNumber = config->DiceNumber; for (int i = 0; i < config->DiceNumber; i++) { result->ThrowsResults[i] = ThrowDice(config); result->Sum += result->ThrowsResults[i]; } return result; }
int ThrowDice(struct DiceConfiguration *config) { return rand() % config->DiceType + 1; }
void PrintDiceThrowsResult(struct DiceThrowsResult *result) { for (int i = 0; i < result->DiceNumber; i++) { printf("%d ", result->ThrowsResults[i] ; } printf("Sum: %d\n", result->Sum); }
So try making a loop inside main, around the function calls to ThrowDices() and PrintDiceThrowsResults(). Do you know the syntax for a while loop in C? You will need to ask the user to if he wants to continue, and use this input as the condition in your loop. Take a try at this, and post back if you need help. A basic loop could look like: + Show Spoiler + while (continue != FALSE) { doStuff(); doMoreShit();
continue = getContinue(); }
You mean something like that? + Show Spoiler + while (DiceNumber > 0 && DiceType > 0) {
do stuff
}
Then the entire thing should become a while loop... The problem I'm facing right now is the right place to put the loop, as this while checks for 2 variables which should be assigned before the loop and it would be pointless to do this stuff over and over again with the same variables (infinite loop welcome to). My mind is completely empty right now, I need to think about it.
No you should declare another variable. Ask the user if they want to roll again, and store their input in that variable. Loop based on the value of that variable.
+ Show Spoiler + while( repeat != 'n' ) { result = ThrowDices(config);
PrintDiceThrowsResult(result);
printf("Want to play again? Enter y/n.");
scanf("%c", &repeat); }
Did you find the dice program somewhere online? It's well written.
|
|
|
|