logo

Const søkeord i C++

I denne artikkelen, de ulike funksjonene til const nøkkelord som finnes i C++ er diskutert. Når som helst const nøkkelord er knyttet til en hvilken som helst metode(), variabel, pekervariabel , og med objektet til en klasse forhindrer den den spesifikke objekt/metode()/variabel for å endre dataelementverdien.

skuespiller zeenat aman

Konstante variabler:

Det er et visst sett med regler for deklarasjon og initialisering av konstante variabler:



  • De const variabel kan ikke etterlates uinitialisert på tidspunktet for oppdraget.
  • Det kan ikke tildeles verdi noe sted i programmet.
  • Eksplisitt verdi måtte gis til konstantvariabelen på tidspunktet for erklæringen av konstantvariabelen.

const variabel

Nedenfor er C++-programmet for å demonstrere konseptet ovenfor:

C++
// C++ program to demonstrate the // the above concept #include  using namespace std; // Driver Code int main() {  // const int x; CTE error  // x = 9; CTE error  const int y = 10;  cout << y;  return 0; }>

Produksjon
10>

Feilen står overfor feil erklæring : Hvis du prøver å initialisere const-variabelen uten å tilordne en eksplisitt verdi, genereres en kompileringstidsfeil (CTE).



Const nøkkelord med pekervariabler:


Pekere kan deklareres med et const nøkkelord. Så det er tre mulige måter å bruke et const nøkkelord med en peker på, som er som følger:

Når pekervariabel peker på en const-verdi :



Syntaks:

  const data_type* var_name;>

Nedenfor er C++-programmet for å implementere konseptet ovenfor:

C++
// C++ program to demonstrate the // above concept #include  using namespace std; // Driver Code int main() {  int x{ 10 };  char y{ 'M' };  const int* i = &x;  const char* j = &y;  // Value of x and y can be altered,  // they are not constant variables  x = 9;  y = 'A';  // Change of constant values because,  // i and j are pointing to const-int  // & const-char type value  // *i = 6;  // *j = 7;  cout << *i << ' ' << *j; }>

Produksjon
9 A>

Forklaring: Her i tilfellet ovenfor er i og j to pekervariabler som peker til en minneplassering const int-type og char-type, men verdien som er lagret på disse korresponderende stedene kan endres som vi har gjort ovenfor.

Ellers , de følgende feil vises: Hvis vi prøver å endre verdien av const-variabelen.

Når const-pekervariabelen peker på verdien :

Syntaks:

  data_type* const     var_name;>

Nedenfor er eksemplet for å demonstrere konseptet ovenfor:

C++
// C++ program to demonstrate the // above concept #include  using namespace std; // Driver Code int main() {  // x and z non-const var  int x = 5;  int z = 6;  // y and p non-const var  char y = 'A';  char p = 'C';  // const pointer(i) pointing  // to the var x's location  int* const i = &x;  // const pointer(j) pointing  // to the var y's location  char* const j = &y;  // The values that is stored at the memory location can  // modified even if we modify it through the pointer  // itself No CTE error  *i = 10;  *j = 'D';  // CTE because pointer variable  // is const type so the address  // pointed by the pointer variables  // can't be changed  // i = &z;  // j = &p;  cout << *i << ' and ' << *j << endl;  cout << i << ' and ' << j;  return 0; }>

Produksjon
10 and D 0x7ffe21db72b4 and D>

Forklaring: Verdiene som er lagret i den korresponderende pekervariabelen i og j kan endres, men plasseringene som er pekt ut av const-pekervariabler der de tilsvarende verdiene til x og y er lagret, kan ikke endres.

Ellers vil følgende feil vises: Pekervariablene er const og peker til plasseringene der x og y er lagret hvis vi prøver å endre adresseplasseringen, vil vi møte feilen.

Når const-pekeren peker på en const-variabel :

Syntaks:

  const data_type* const var_name;>

Nedenfor er C++-programmet for å demonstrere konseptet ovenfor:

C++
// C++ program to demonstrate // the above concept #include  using namespace std; // Driver code int main() {  int x{ 9 };  const int* const i = &x;  // *i=10;  // The above statement will give CTE  // Once Ptr(*i) value is  // assigned, later it can't  // be modified(Error)  char y{ 'A' };  const char* const j = &y;  // *j='B';  // The above statement will give CTE  // Once Ptr(*j) value is  // assigned, later it can't  // be modified(Error)  cout << *i << ' and ' << *j;  return 0; }>

Produksjon
9 and A>

Forklaring: Her peker const-pekervariabelen til const-variabelen. Så du har heller ikke lov til å endre const pekervariabel(*P) heller ikke verdien som er lagret på stedet pekt av det pekervariabel(*P).

Ellers vil følgende feil vises: Her er både pekervariabelen og plasseringene som pekes av pekervariabelen const, så hvis noen av dem endres, vil følgende feil vises:

Send const-argument-verdien til en ikke-const-parameter for en funksjon som forårsaker feil : Å sende const-argumentverdien til en ikke-const-parameter for en funksjon er ikke gyldig, det gir deg en kompileringstidsfeil.

Nedenfor er C++-programmet for å demonstrere konseptet ovenfor:

C++
// C++ program to demonstrate // the above concept #include  using namespace std; int foo(int* y) { return *y; } // Driver code int main() {  int z = 8;  const int* x = &z;  cout << foo(x);  return 0; }>

Produksjon: Kompileringstidsfeilen som vil vises som om const-verdien sendes til et hvilket som helst ikke-const-argument for funksjonen, så vil følgende kompileringstidsfeil vises:

I tillegg vil bestått const-peker ikke resultere i noen feil fordi det opprettes en annen peker som også peker til samme minneplassering.

C++
//C++ program to demonstrate the above concept #include  using namespace std; void printfunc(int* ptr) {  cout << 'Value :' << *ptr << endl;  cout << 'Address of ptr :' << &ptr << endl; } //Driver Code int main() {  int x = 10;  int* const i = &x;  printfunc(i);  cout << 'Address of i :' << &i << endl; }>

Produksjon
Value :10 Address of ptr :0x7ffff0189b48 Address of i :0x7ffff0189b70>

Koden kjøres uten feil og de to pekerne har forskjellige adresser.

I nøtteskall kan diskusjonen ovenfor konkluderes som følger:

1. int verdi = 5; // ikke-konst verdi

2. const int *ptr_1 = &verdi; // ptr_1 peker på en const int verdi, så dette er en peker til en const verdi.

3. int *const ptr_2 = &verdi; // ptr_2 peker på en int, så dette er en const-peker til en ikke-konst verdi.

4. const int *const ptr_3 = &verdi; // ptr_3 peker på en const int-verdi, så dette er en const-peker til en const-verdi.

Konstante metoder:

I likhet med medlemsfunksjoner og medlemsfunksjonsargumenter, kan objektene til en klasse også erklæres som konst . Et objekt erklært som const kan ikke endres og kan derfor kun påkalle const-medlemsfunksjoner, da disse funksjonene sikrer at objektet ikke endres.

Syntaks:

const Class_Name Object_name;>
  • Når en funksjon er erklært som const, kan den kalles på alle typer objekter, const-objekter så vel som ikke-const-objekter.
  • Når et objekt er deklarert som const, må det initialiseres på tidspunktet for deklarasjonen. Imidlertid er gjenstandsinitialisering mens deklarering bare mulig ved hjelp av konstruktører.

Det er to måter å a konstant funksjon erklæring:

Ordinær konst-funksjonserklæring :

  const void foo()    {     //void foo() const Not valid    }          int main()    {     foo();    }>

En konstmedlemsfunksjon i klassen :

  class    {     void foo() const     {     //.....     }    }>

Nedenfor er et eksempel på en konstant funksjon:

C++
// C++ program to demonstrate the // constant function #include  using namespace std; // Class Test class Test {  int value; public:  // Constructor  Test(int v = 0) { value = v; }  // We get compiler error if we  // add a line like 'value = 100;'  // in this function.  int getValue() const { return value; }  // a nonconst function trying to modify value  void setValue(int val) { value = val; } }; // Driver Code int main() {  // Object of the class T  Test t(20);  // non-const object invoking const function, no error  cout << t.getValue() << endl;  // const object  const Test t_const(10);  // const object invoking const function, no error  cout << t_const.getValue() << endl;  // const object invoking non-const function, CTE  // t_const.setValue(15);  // non-const object invoking non-const function, no  // error  t.setValue(12);  cout << t.getValue() << endl;  return 0; }>

Produksjon
20 10 12>

Følgende feil vil, hvis du prøver, kalle opp non-const-funksjonen fra et const-objekt

kaller-ikke-konst-funksjon-fra-konst-objekt


Konstant funksjonsparametere og returtype :

A function() parametere og returtype funksjon() kan erklæres som konstant. Konstante verdier kan ikke endres ettersom et slikt forsøk vil generere en kompileringstidsfeil.

Nedenfor er C++-programmet for å implementere tilnærmingen ovenfor:

C++
// C++ program to demonstrate the // above approach #include  using namespace std; // Function foo() with variable // const int void foo(const int y) {  // y = 6; const value  // can't be change  cout << y; } // Function foo() with variable int void foo1(int y) {  // Non-const value can be change  y = 5;  cout << '
' << y; } // Driver Code int main() {  int x = 9;  const int z = 10;  foo(z);  foo1(x);  return 0; }>

Produksjon
10 5>


Forklaring: Følgende feil vil vises hvis setningen y = 6 brukes i funksjonen foo():

  • //y = 6; en const-verdi kan ikke endres eller modifiseres.

For const returtype : Returtypen til funksjonen() er const, og derfor returnerer den en konstant heltallsverdi til oss. Nedenfor er C++-programmet for å implementere tilnærmingen ovenfor:

C++
// C++ program for the above approach #include  using namespace std; const int foo(int y) {  y--;  return y; } int main() {  int x = 9;  const int z = 10;  cout << foo(x) << '
' << foo(z);  return 0; }>

Produksjon
8 9>

Verdien som returneres vil være en konstant verdi.

Det er heller ikke noe vesentlig problem å overføre const eller non-const variabel til funksjonen så lenge vi sender den med verdi fordi en ny kopi opprettes. Problemet oppstår når vi prøver å sende konstantvariabelen ved referanse til funksjonen hvis parameter er ikke-konstant. Dette ser bort fra const-kvalifiseringen som fører til følgende feil:

sende-konst-argument-til-ikke-konst-parameter-ved-referanse

For const returtype og const parameter : Her er både returtype og parameter for funksjonen av const-typer. Nedenfor er C++-programmet for å implementere tilnærmingen ovenfor:

C++
// C++ program for the above approach #include  using namespace std; const int foo(const int y) {  // y = 9; it'll give CTE error as  // y is const var its value can't  // be change  return y; } // Driver code int main() {  int x = 9;  const int z = 10;  cout << foo(x) << '
' << foo(z);  return 0; }>

Produksjon
9 10>

Forklaring: Her kan både const og ikke-const-verdier sendes som const-parameter til funksjonen, men vi har ikke lov til å endre verdien på en bestått variabel fordi parameteren er const. Ellers vil vi møte feilen som nedenfor:

// y=9; det vil gi kompileringstidsfeilen da y er const var verdien kan ikke endres.