proprietati in clase C++

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
alex
Junior
Junior
Posts: 8
Joined: 31 Aug 2007, 13:23

proprietati in clase C++

Post by alex » 25 Sep 2007, 10:09

Salutare

In .net clasele contin si proprietati pe langa campuri si metode. Exista acest concept si in C++ ?

in C#
...

Code: Select all

public int Scale
{
   set 
   {
      scale =  value;
   }
   get
   {
      return value;
    }
}
in C++ trebuie sa fac 2 functii pentru acest lucru?



User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: proprietati

Post by Marius Bancila » 25 Sep 2007, 10:17

In C# ai asa:

Code: Select all

class foo
{
  private int scale;

  public int Scale
  {
     set  { scale =  value; }
     get { return value; }
  }
}
In C++ faci asa:

Code: Select all

class foo
{
  int scale;
public:
  void setScale(int value) {scale = value;}
  int getScale() const {return scale;}
};
Diferenta nu e mare dupa parerea mea. Pt. ca daca te uiti in MSIL o sa vezi ca acele set si get din C# tot niste metode ajung sa fie (get_Scale() si set_Scale()).
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

Viorel
Microsoft MVP
Microsoft MVP
Posts: 293
Joined: 13 Jul 2007, 12:26

Re: proprietati in clase C++

Post by Viorel » 25 Sep 2007, 10:25

În varianta Managed C++ sintaxa se bazează pe cuvîntul-cheie property:

Code: Select all

ref class Test
{
    int scale;
public:
    property int Scale
    {
        void set(int value)
        {
            scale = value;
        }
        int get()
        {
            return scale;
        }
    }
};
Vezi http://msdn2.microsoft.com/en-us/librar ... S.80).aspx.

Apropo, în cazuri simple, exemplul de mai sus poate fi rescris astfel:

Code: Select all

ref class Test
{
public:
    property int Scale;
};
(Întrebarea e dacă există un echivalent sintactic pentru astfel de cazuri în C# şi care e diferenţa faţă de un simplu "int Scale;"?)

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: proprietati in clase C++

Post by Ovidiu Cucu » 26 Sep 2007, 10:15

C# si alte clone mutante (managed) de C++ sunt super cool pentru ca introduc keyword-uri noi, ajutatoare.
C++ e si mai cool pentru ca pastraza numai keyword-urile de care e absoluta nevoie. :)

// de altfel, property/get/set sunt doar cateva dintre marile gaselnitze managed cu iz de VB... :D

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: proprietati in clase C++

Post by Marius Bancila » 26 Sep 2007, 10:49

Iar "gaselnita"

Code: Select all

class foo 
{
   public int Scale {get; set;}
}
prin care compilatorul adauga implicit:

Code: Select all

class foo 
{
   private int _scale;
   public int Scale 
   { 
     get {return _scale;}
     set {_scale = value;}
   }
}
mi se pare ca "miroase" a

Code: Select all

class foo
{
public:
  int Scale;
};
din C++.
Incet incet mergem spre origini... ;) :mrgreen:
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: proprietati in clase C++

Post by neagu_laurentiu » 26 Sep 2007, 21:07

Visual C++ a rezolvat chestia cu proprietatile pentru unmanaged prin extensia
__declspec( property( get=get_func_name ) ) declarator

http://msdn2.microsoft.com/en-us/librar ... S.80).aspx

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: proprietati in clase C++

Post by Ovidiu Cucu » 27 Sep 2007, 00:39

neagu_laurentiu wrote:Visual C++ a rezolvat chestia cu proprietatile pentru unmanaged prin extensia
__declspec( property( get=get_func_name ) ) declarator

http://msdn2.microsoft.com/en-us/librar ... S.80).aspx
Cool!
// yet another one Microsoft Specific Gaselnitza menita sa faca C++ul more VB "standard" compliant... :D

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: proprietati in clase C++

Post by Marius Bancila » 27 Sep 2007, 08:54

neagu_laurentiu wrote:Visual C++ a rezolvat chestia cu proprietatile pentru unmanaged prin extensia
__declspec( property( get=get_func_name ) ) declarator

msdn2.microsoft.com/en-us/library/yhfk0thd(VS.80).aspx
Chiar nu stiam de chestia asta. Dar trebe sa-i dau dreptate lui Ovidiu, intrucat chiar nu-i vad rostul. In C++ chiar mi se pare ca ar putea fi confuz, mai ales pentru cei care nu au foarte multa experienta si se uita peste un cod unde vad asa ceva.
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: proprietati in clase C++

Post by Ovidiu Cucu » 27 Sep 2007, 10:02

Pai tokmai aia cu experienta s-ar putea sa dea ori in balbaiala ori cu tastatura-n monitor. :D

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: proprietati in clase C++

Post by neagu_laurentiu » 27 Sep 2007, 13:48

Radeti de VB... dar e pacat ca Visual C++ nu are astazi un IDE si librarii/biblioteci sa-i ia locul (Borland/CodeGear are :reallymad: ) mai ales ca introducand si alte extensii precum __event, __hook, __unhook sau __raise putea face o un framework inlocuitor pentru MFC-ul prin care programatorii sa poata spuna clientilor: "pot sa-ti fac ceva bun, rapid si in termen scurt". Ori acum pot sa zic clientilor doar: "pot sa-ti fac ceva bun, rapid dar in termen lung".

User avatar
Nemok
Junior
Junior
Posts: 40
Joined: 10 Sep 2007, 05:04
Location: Bacau / Iasi
Contact:

Re: proprietati in clase C++

Post by Nemok » 27 Sep 2007, 23:29

Pai exista managed c++ care este mai 'RAD' decat RAD-ul celor de la Borland.
Oricum intradevar exista o problema si asta deoarece in ultimele versiuni VS, MFC-ul a fost pus pe ultimul loc. In afara de cateva imbunatatiri mai ca a fost ignorat.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: proprietati in clase C++

Post by Ovidiu Cucu » 28 Sep 2007, 12:43

MFC-ul are un mare dezavantaj: e atat de usor incat multa lume nu considera necesar sa citeasca mai intai cu ce se mananca inainte de a zice ca-i "bullshit"... ;)

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: proprietati in clase C++

Post by Silviu Ardelean » 29 Oct 2007, 10:42

Ovidiu Cucu wrote:MFC-ul are un mare dezavantaj: e atat de usor incat multa lume nu considera necesar sa citeasca mai intai cu ce se mananca inainte de a zice ca-i "bullshit"... ;)
Am intalnit si eu oameni care au astfel de idei... iar din discutiile cu ei mi-am dat seama ca de fapt nu au sapat deloc sa stie cu ce se mananca treaba... Dar ei isi dadeau de zori cu parerea...

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: proprietati in clase C++

Post by Dragos Cojocari » 29 Oct 2007, 11:10

neagu_laurentiu wrote:Radeti de VB... dar e pacat ca Visual C++ nu are astazi un IDE si librarii/biblioteci sa-i ia locul (Borland/CodeGear are :reallymad: ) mai ales ca introducand si alte extensii precum __event, __hook, __unhook sau __raise putea face o un framework inlocuitor pentru MFC-ul prin care programatorii sa poata spuna clientilor: "pot sa-ti fac ceva bun, rapid si in termen scurt". Ori acum pot sa zic clientilor doar: "pot sa-ti fac ceva bun, rapid dar in termen lung".
Nu vad de ce C++ ar trebui sa poata faca asta. VB, Delphi, C# au fost create cu acest scop (RAD). C++ e un limbaj mult mai generic si cum zicea si nea Stroustroup orientata catre programarea de sistem. Nu poti face o app de editat DB la fel de usor ca in VB dar poti face lucruri unde VB-ul nici cu gandul n-a gandit. :)

neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: proprietati in clase C++

Post by neagu_laurentiu » 29 Oct 2007, 12:25

Nu vad de ce C++ ar trebui sa poata faca asta...
Eu zic sa scapam de chestia asta... o fi fost el prima data limbaj de sistem, dar nu ar trebui sa ramana asa ! Din moment ce e foarte puternic ca limbaj, de ce sa nu fie si orientat spre RAD ? Mai ales ca include toate aspectele ce tin de RAD deja ! Adica cei de la Borland/CodeGear is "nebuni" ?

Post Reply