Åtkomstmodifierare - Access modifiers

Åtkomstmodifierare (eller åtkomstspecifikatorer ) är nyckelord objektorienterade språk som ställer in tillgängligheten för klasser, metoder och andra medlemmar. Åtkomstmodifierare är en specifik del av programmeringsspråkens syntax som används för att underlätta inkapsling av komponenter.

I C ++ finns det bara tre åtkomstmodifierare. C # utökar antalet till sex, medan Java har fyra åtkomstmodifierare, men tre nyckelord för detta ändamål. I Java är standardpaketet privat modifierare utan att ha något nyckelord.

När klassen deklareras som offentlig är den tillgänglig för andra klasser som definieras i samma paket liksom de som definieras i andra paket. Detta är den vanligaste specifikationen för klasser. En klass i sig kan dock inte förklaras som privat. Om ingen åtkomstspecifikator anges anges standardåtkomstbegränsningarna. Klassen kommer att vara tillgänglig för andra klasser i samma paket men kommer inte att vara tillgänglig för klasser utanför paketet. När vi säger att en klass är otillgänglig betyder det helt enkelt att vi inte kan skapa ett objekt av den klassen eller förklara en variabel av den klasstypen. Specifieraren för skyddad åtkomst kan inte tillämpas på en klass.

Namn på nyckelord

C ++ använder de tre modifierare kallas public , protected och private . C # har modifierare public , protected , internal , private , protected internal , och private protected . Java har public , package , protected , och private . Åtkomstmodifieraren package är standard och används, om något annat sökord för åtkomstmodifierare saknas. Betydelsen av dessa modifierare kan skilja sig från språk till språk. En jämförelse av nyckelorden, ordnade från de mest begränsande till de mest öppna, och deras betydelse på dessa tre språk följer. Deras synlighet sträcker sig från samma klass till paketet där klassen definieras till en allmän åtkomstbehörighet. Nedan skrivs maximal åtkomst i tabellen.

I Swift finns det fem olika åtkomstnivåer i förhållande till både källfilen där enheten är definierad och modulen som innehåller den källfilen.

Nyckelord C # C ++ Java Snabb
private klass klass
och / eller
vänklasser
klass bifoga endast deklaration
+ förlängningar av deklarationen i samma fil
fileprivate - - - samma fil
private protected härledda klasser i samma sammansättning - - -
protected internal samma monterings-
och / eller
härledda klasser
- - -
protected härledda klasser härledda klasser
och / eller
vänklasser
härledda klasser
och / eller
inom samma paket
-
package - - inom sitt paket -
internal samma montering - - samma modul
public alla alla alla alla
open - - - alla
+ underklass utanför modulen
+ åsidosätter utanför modulen

Exempel i C ++

#include <iostream>
#include <conio.h>
using std::cout;
using std::endl;

struct B { // default access modifier inside struct is public
    void set_n(int v) { n = v; }
    void f()          { cout << "B::f" << endl; }
  protected:
    int m, n; // B::m, B::n are protected
  private:
    int x;
};
 
struct D : B {
    using B::m;               // D::m is public
    int get_n() { return n; } // B::n is accessible here, but not outside
//  int get_x() { return x; } // ERROR, B::x is inaccessible here
 private:
    using B::f;               // D::f is private
};
 
int main() {
    D d;

//  d.x = 2; // ERROR, private
//  d.n = 2; // ERROR, protected
    d.m = 2; // protected B::m is accessible as D::m

    d.set_n(2); // calls B::set_n(int)
    cout << d.get_n() << endl; // output: 2

//  d.f();   // ERROR, B::f is inaccessible as D::f


    B& b = d; // b references d and "views" it as being type B

//  b.x = 3; // ERROR, private
//  b.n = 3; // ERROR, protected
//  b.m = 3; // ERROR, B::m is protected

    b.set_n(3); // calls B::set_n(int)
//  cout << b.get_n(); // ERROR, 'struct B' has no member named 'get_n'

    b.f();   // calls B::f()
    return 0;
}

Referenser

Anteckningar

Bibliografi