digitalmars.D.learn - User imput string int and float[DOUBT]
- Jean Cesar (51/51) Feb 15 2017 How do I make a class person where I use set and get methods to
- =?UTF-8?Q?Ali_=c3=87ehreli?= (78/80) Feb 15 2017 I have some information here:
- Jean Cesar (12/95) Feb 15 2017 So I'm a beginner in this language and have very little time I
- =?UTF-8?Q?Ali_=c3=87ehreli?= (12/24) Feb 15 2017 In D, constructor is always called this():
- Jean Cesar (52/79) Feb 16 2017 So I used get methods and sets only as initial pattern to
- =?UTF-8?Q?Ali_=c3=87ehreli?= (74/111) Feb 16 2017 I think D is very suitable for that.
- Jean Cesar (9/138) Feb 16 2017 I tried to define a method to read vectors of chars but this is
How do I make a class person where I use set and get methods to imput the user type: Import std.stdio; class person { private: string name, address; int age; float height; public: void setNome() { write("Enter Your Name:"); // the problem is here how am I going to read the imput of a string typed by the user? } void setIty() { write("Enter Your Age:"); // Another problem here also to read integer values like I would? } void setHeight() { write("Enter Your Height:"); // Another problem here also to read floats or double values like I would? } float getHeight() { return height; } int getIty() { return age; } string getNome() { return name; } } void main () { person p = new person(); p.setName(); p.setIdade(); p.setHeight(); p.getName(); p.getIdade(); p.getHeight(); }
Feb 15 2017
On 02/15/2017 03:20 PM, Jean Cesar wrote:How do I make a class person where I use set and get methods to imput the user type:I have some information here: http://ddili.org/ders/d.en/input.html You should also know how to read strings: http://ddili.org/ders/d.en/strings.html And this section about refactoring has the concept of a readInt() function template: http://ddili.org/ders/d.en/functions.html#ix_functions.refactor Combining all three: import std.stdio; import std.traits; auto read(T)(ref T t, string message) if (!isSomeString!T) { writef("%s: ", message); readf(" %s", &t); return t; } auto read(S)(ref S s, string message) if (isSomeString!S) { import std.string : strip; writef("%s: ", message); s = readln().strip(); return s; } class person { private: string name, address; int age; float height; public: void setNome() { read(name, "Enter Your Name"); } void setIty() { read(age, "Enter Your Age"); } void setHeight() { read(height, "Enter Your Height"); } float getHeight() { return height; } int getIty() { return age; } string getNome() { return name; } } void main () { person p = new person(); p.setNome(); p.setIty(); p.setHeight(); writeln(p.getNome()); writeln(p.getIty()); writeln(p.getHeight()); } Unrelated, a bunch of get/set methods is commonly seen as inferior to a design where another piece of code does the reading and makes the object after the fact: person readPerson(File input) { // ... parse the input ... // Potentially, use the constructor: auto p = new person(name, age, /* ... */); return p; } One reason is the fact that the person may be seen as incomplete and unusable unless all fields are set. Again, it's beside the point... :) Ali
Feb 15 2017
On Wednesday, 15 February 2017 at 23:40:41 UTC, Ali Çehreli wrote:On 02/15/2017 03:20 PM, Jean Cesar wrote:So I'm a beginner in this language and have very little time I started I'm interested in apprehending concepts of object orientation polymorphism inheritance, multiple inheritance as in c ++, but I did not understand how to use constructor in it Because I simply did. Class person { person(){} ~ Person () {} } And error ...How do I make a class person where I use set and get methods to imput the user type:I have some information here: http://ddili.org/ders/d.en/input.html You should also know how to read strings: http://ddili.org/ders/d.en/strings.html And this section about refactoring has the concept of a readInt() function template: http://ddili.org/ders/d.en/functions.html#ix_functions.refactor Combining all three: import std.stdio; import std.traits; auto read(T)(ref T t, string message) if (!isSomeString!T) { writef("%s: ", message); readf(" %s", &t); return t; } auto read(S)(ref S s, string message) if (isSomeString!S) { import std.string : strip; writef("%s: ", message); s = readln().strip(); return s; } class person { private: string name, address; int age; float height; public: void setNome() { read(name, "Enter Your Name"); } void setIty() { read(age, "Enter Your Age"); } void setHeight() { read(height, "Enter Your Height"); } float getHeight() { return height; } int getIty() { return age; } string getNome() { return name; } } void main () { person p = new person(); p.setNome(); p.setIty(); p.setHeight(); writeln(p.getNome()); writeln(p.getIty()); writeln(p.getHeight()); } Unrelated, a bunch of get/set methods is commonly seen as inferior to a design where another piece of code does the reading and makes the object after the fact: person readPerson(File input) { // ... parse the input ... // Potentially, use the constructor: auto p = new person(name, age, /* ... */); return p; } One reason is the fact that the person may be seen as incomplete and unusable unless all fields are set. Again, it's beside the point... :) Ali
Feb 15 2017
On 02/15/2017 05:49 PM, Jean Cesar wrote:So I'm a beginner in this language and have very little time I started I'm interested in apprehending concepts of object orientation polymorphism inheritance, multiple inheritance as in c ++D is similar to C++ but also very different.but I did not understand how to use constructor in it Because I simply did. Class person { person(){} ~ Person () {} } And error ...In D, constructor is always called this(): class Person { this(){} ~this() {} } void main() { auto p = new Person(); } Ali
Feb 15 2017
On Thursday, 16 February 2017 at 02:17:49 UTC, Ali Çehreli wrote:On 02/15/2017 05:49 PM, Jean Cesar wrote:So I used get methods and sets only as initial pattern to netender the functioning of the language in relation to some concepts of the same I intend to learn it not because it is a new language, but I want to understand how to leave a very small code with the largest number of Possible functionality type I still do not know very well or use constructors in C ++ but I have very high potential in a code with multiple inheritance, I think of compilers in the case of the code that favors me in reading so I would do something like: void main () { minhaclasse c = new minhaclasse(string text); minhaclasse d = new minhaclasse(int number); write("Enter your name: ") c.set(); write("Enter your age: ") d.set(); /* the set method would already fetch user i imput by mistake for the information automatically */ Writeln ( "\n\tString:", c.get (), "\n\tInt:", d.get () ); } Or something like: void main () { string txt; Int num; write("Enter your name: ") minhaclasse(text).set(); write("Enter your age: ") minhaclasse(num).set(); writeln ( "\n\tString:", minhaclasse(text).print() ;, "\n\tInt:", minhaclasse(num).print(); ); } I think of object orientation this way to avoid getting rewritten many things so I would only define what the set or get would return by initializing the constructor only but I have no idea how to do that .. My goal in learning to use languages like Java, C ++, D is with the intention of learning the best way to reuse code and orienation to objects and also development cross-platform codes that will run in standard ansi for, Unix, Linux, Windows, android etc. ..So I'm a beginner in this language and have very little timeI startedI'm interested in apprehending concepts of object orientation polymorphism inheritance, multiple inheritance as in c ++D is similar to C++ but also very different.but I did not understand how to use constructor in it Because I simply did. Class person { person(){} ~ Person () {} } And error ...In D, constructor is always called this(): class Person { this(){} ~this() {} } void main() { auto p = new Person(); } Ali
Feb 16 2017
On 02/16/2017 02:05 PM, Jean Cesar wrote:So I used get methods and sets only as initial pattern to netender the functioning of the language in relation to some concepts of the sameMakes sense...how to leave a very small code with the largest number of Possible functionality typeI think D is very suitable for that.I still do not know very well or use constructors in C ++Understandable: Many coding guidelines eschew doing non-trivial work in constructors. They require a member function like obj.initialize(/* ... */) to be called in order to get a functioning object.but I have very high potential in a code with multiple inheritanceThat's going to be a problem because D does not allow multiple inheritance.I think of compilers in the case of the code that favors me in reading so I would do something like: void main () { minhaclasse c = new minhaclasse(string text); minhaclasse d = new minhaclasse(int number); write("Enter your name: ") c.set();So, your minhaclasse is basically ValorLegível (ReadableValue), which would not scale because likely it's also writable and movable, etc. And that explains why you're looking for multiple inheritance. :) // NOT valid D (and no, I don't speak Portuguese) class MinhaValor : ValorLegível, ValorEscrita, ValorMóvel /*, ... */ { // ... }void main () { string txt; Int num; write("Enter your name: ") minhaclasse(text).set(); write("Enter your age: ") minhaclasse(num).set(); writeln ( "\n\tString:", minhaclasse(text).print() ;, "\n\tInt:", minhaclasse(num).print(); ); } I think of object orientation this way to avoid getting rewritten many things so I would only define what the set or get would return by initializing the constructor only but I have no idea how to do that ..You make it sound as if OOP is for code reuse or for reducing code repetition. I think regular functions provide that already. Unless polymorphism is really beneficial, functional style is preferable. Additionally, D has this very useful universal function call syntax (UFCS), which makes your use case easy to implement, and which my earlier code could have benefited from as well. import std.stdio; import std.traits; auto read(T)(ref T t, string message) if (!isSomeString!T) { writef("%s: ", message); readf(" %s", &t); return t; } auto read(S)(ref S s, string message) if (isSomeString!S) { import std.string : strip; writef("%s: ", message); s = readln().strip(); return s; } class person { private: string name, address; int age; float height; public: static person fromConsole() { auto p = new person(); /* UFCS in action: Note how these are not written as * read(p.name, /* ... */) */ p.name.read("Enter Your Name"); p.age.read("Enter Your Age"); p.height.read("Enter Your Height"); return p; } float getHeight() { return height; } int getIty() { return age; } string getNome() { return name; } } void main () { person p = person.fromConsole(); writeln(p.getNome()); writeln(p.getIty()); writeln(p.getHeight()); }My goal in learning to use languages like Java, C ++, D is with the intention of learning the best way to reuse code and orienation to objects and also development cross-platform codes that will run in standard ansi for, Unix, Linux, Windows, android etc. ..Ali
Feb 16 2017
On Thursday, 16 February 2017 at 22:44:58 UTC, Ali Çehreli wrote:On 02/16/2017 02:05 PM, Jean Cesar wrote:I tried to define a method to read vectors of chars but this is giving error auto read(C)(ref C c, char[] message) if (!isSomeChar!C) { writef("\n\t%s: ", message); read(" %s", &c); return c; }So I used get methods and sets only as initial pattern tonetender thefunctioning of the language in relation to some concepts ofthe same Makes sense...how to leave a very small code with the largest number of Possible functionality typeI think D is very suitable for that.I still do not know very well or use constructors in C ++Understandable: Many coding guidelines eschew doing non-trivial work in constructors. They require a member function like obj.initialize(/* ... */) to be called in order to get a functioning object.but I have very high potential in a code with multiple inheritanceThat's going to be a problem because D does not allow multiple inheritance.I think of compilers in the case of the code that favors me in reading so I would do something like: void main () { minhaclasse c = new minhaclasse(string text); minhaclasse d = new minhaclasse(int number); write("Enter your name: ") c.set();So, your minhaclasse is basically ValorLegível (ReadableValue), which would not scale because likely it's also writable and movable, etc. And that explains why you're looking for multiple inheritance. :) // NOT valid D (and no, I don't speak Portuguese) class MinhaValor : ValorLegível, ValorEscrita, ValorMóvel /*, ... */ { // ... }void main () { string txt; Int num; write("Enter your name: ") minhaclasse(text).set(); write("Enter your age: ") minhaclasse(num).set(); writeln ( "\n\tString:", minhaclasse(text).print() ;, "\n\tInt:", minhaclasse(num).print(); ); } I think of object orientation this way to avoid gettingrewritten manythings so I would only define what the set or get wouldreturn byinitializing the constructor only but I have no idea how todo that .. You make it sound as if OOP is for code reuse or for reducing code repetition. I think regular functions provide that already. Unless polymorphism is really beneficial, functional style is preferable. Additionally, D has this very useful universal function call syntax (UFCS), which makes your use case easy to implement, and which my earlier code could have benefited from as well. import std.stdio; import std.traits; auto read(T)(ref T t, string message) if (!isSomeString!T) { writef("%s: ", message); readf(" %s", &t); return t; } auto read(S)(ref S s, string message) if (isSomeString!S) { import std.string : strip; writef("%s: ", message); s = readln().strip(); return s; } class person { private: string name, address; int age; float height; public: static person fromConsole() { auto p = new person(); /* UFCS in action: Note how these are not written as * read(p.name, /* ... */) */ p.name.read("Enter Your Name"); p.age.read("Enter Your Age"); p.height.read("Enter Your Height"); return p; } float getHeight() { return height; } int getIty() { return age; } string getNome() { return name; } } void main () { person p = person.fromConsole(); writeln(p.getNome()); writeln(p.getIty()); writeln(p.getHeight()); }My goal in learning to use languages like Java, C ++, D iswith theintention of learning the best way to reuse code andorienation toobjects and also development cross-platform codes that willrun instandard ansi for, Unix, Linux, Windows, android etc. ..Ali
Feb 16 2017