Mera om initialisering

Att initialisera container-klasser är ju bra men vad gäller för structar och klasser. I gamla hederliga C++ var viss initialisering möjlig med hjälp av klammerparentes-notationen. I C++2011 tar man det längre genom att göra initialiseringen enhetlig och fungera för alla objekt.

Säg att du har en klass med en konstruktor som tar två parametrar så här:

class Person
{
public:
  Person(const string & name, int age)
  : name_{name}, age_{age} {};
...
private:
  string name_;
  int age_;
};

då kan du initialisera den så här:

Person me{"No Name", 50};

Alltså samma syntax som vi såg tidigare för vectorn men den här gången för en konstruktor som tar två argument, en sträng och en integer. Det här fungerar för en vanlig struct också genom att varje medlem initialiseras, precis som man kan förvänta sig.

Man kan till och med göra detta. Notera hur returraden bara innehåller initialiseringsuttrycket för typen Person.

Person getPerson()
{
  return {"Foo Bar", 42};
}
Publicerad i C/C++

Kategorier

WP to LinkedIn Auto Publish Powered By : XYZScripts.com