Care este diferența dintre void func (); și doar func (); în C ++?


Răspunsul 1:

Ca funcție gratuită:

void free_func (); // nu ia argumente, nu returnează nimic
free_func ();

A doua funcție nu are argumente și returnează o int, folosind vechiul comportament implicit-la-int din anii 1970. C. Majoritatea compilatoarelor vor avertiza acum și ar trebui să promovați această avertizare la o eroare.

În cadrul unei clase:

clasa Class_
{
  Clasă_(); // constructor - populează această instanță
  void Class_ (); // eroare, constructorul nu poate avea un tip de retur

Din punctul de vedere al apelantului, valoarea returnată a constructorului este instanța Class_ pe care o inițializează. Ca și în, auto x = Class_ () ;.

Încercarea de a defini o funcție cu același nume ca și clasa eșuează, deoarece numai constructorii pot avea acest nume.

Tot în cadrul unei clase:

clasa Class_
{
  void membru_func (); // nu ia argumente, nu returnează nimic
  member_func (); // eroare de compilare; membrii nu au implicit-la-int

Pe scurt: fiecare funcție trebuie să-și indice tipul de returnare; pentru constructori, acel tip de returnare este clasa pe care o construiesc.


Răspunsul 2:

Mulțumim pentru A2A.

Pentru a crea o funcție, trebuie să o declarați în acest fel:

void func ()
{
  cout << "Salut lume \ n";
}

Constructorul este un tip special de „funcție” care se numește automat la crearea unei instanțe a unei clase. Deci, acest apel:

int principal ()
{
  func f; // presupunem că nu aveți funcția "func"
  returnare 0;
}

Creează o nouă instanță (f) din clasa „func”, astfel încât acest cod va fi executat:

funcții de clasă
{
  func ()
  {
    cout << "Sunt constructorul funcției \ n";
  }
}

iar rezultatul dvs. va fi:

Eu sunt constructorul clasei func

Deci, dacă aveți ceva de genul func () în loc de void func () este pentru că, este constructorul unei clase numit func și nu o funcție liberă ca cea din urmă.