程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 深刻懂得C++中public、protected及private用法

深刻懂得C++中public、protected及private用法

編輯:關於C++

深刻懂得C++中public、protected及private用法。本站提示廣大學習愛好者:(深刻懂得C++中public、protected及private用法)文章只能為提供參考,不一定能成為您想要的結果。以下是深刻懂得C++中public、protected及private用法正文


初學C++的同伙常常在類中看到public,protected,private和它們在繼續中表現的一些拜訪規模,很輕易弄懵懂。明天本文就來非常剖析一下C++中public、protected及private用法。信任關於年夜家深刻控制C++法式設計會有很年夜的贊助。

這裡我們起首要明確上面幾點。

1.類的一個特點就是封裝,public和private感化就是完成這一目標。所以:

用戶代碼(類外)可以拜訪public成員而不克不及拜訪private成員;private成員只能由類成員(類內)和友元拜訪。

2.類的另外一個特點就是繼續,protected的感化就是完成這一目標。所以:

protected成員可以被派生類對象拜訪,不克不及被用戶代碼(類外)拜訪。

現來看看以下示例:

#include<iostream>
#include<assert.h>
using namespace std;
class A{
public:
  int a;
  A(){
    a1 = 1;
    a2 = 2;
    a3 = 3;
    a = 4;
  }
  void fun(){
    cout << a << endl;    //准確
    cout << a1 << endl;   //准確
    cout << a2 << endl;   //准確,類內拜訪
    cout << a3 << endl;   //准確,類內拜訪
  }
public:
  int a1;
protected:
  int a2;
private:
  int a3;
};
int main(){
  A itema;
  itema.a = 10;    //准確
  itema.a1 = 20;    //准確
  itema.a2 = 30;    //毛病,類外不克不及拜訪protected成員
  itema.a3 = 40;    //毛病,類外不克不及拜訪private成員
  system("pause");
  return 0;
}

繼續中的特色:

先記住:不論能否繼續,下面的規矩永久實用!

有public, protected, private三種繼續方法,它們響應地轉變了基類成員的拜訪屬性。

1.public繼續:基類public成員,protected成員,private成員的拜訪屬性在派生類平分別釀成:public, protected, private

2.protected繼續:基類public成員,protected成員,private成員的拜訪屬性在派生類平分別釀成:protected, protected, private

3.private繼續:基類public成員,protected成員,private成員的拜訪屬性在派生類平分別釀成:private, private, private

但不管哪一種繼續方法,下面兩點都沒有轉變:

1.private成員只能被本類成員(類內)和友元拜訪,不克不及被派生類拜訪;

2.protected成員可以被派生類拜訪。

再來看看以下代碼:

1.public繼續

代碼以下:

#include<iostream>
#include<assert.h>
using namespace std;

class A{
public:
  int a;
  A(){
    a1 = 1;
    a2 = 2;
    a3 = 3;
    a = 4;
  }
  void fun(){
    cout << a << endl;    //准確
    cout << a1 << endl;   //准確
    cout << a2 << endl;   //准確
    cout << a3 << endl;   //准確
  }
public:
  int a1;
protected:
  int a2;
private:
  int a3;
};
class B : public A{
public:
  int a;
  B(int i){
    A();
    a = i;
  }
  void fun(){
    cout << a << endl;       //准確,public成員
    cout << a1 << endl;       //准確,基類的public成員,在派生類中還是public成員。
    cout << a2 << endl;       //准確,基類的protected成員,在派生類中還是protected可以被派生類拜訪。
    cout << a3 << endl;       //毛病,基類的private成員不克不及被派生類拜訪。
  }
};
int main(){
  B b(10);
  cout << b.a << endl;
  cout << b.a1 << endl;   //准確
  cout << b.a2 << endl;   //毛病,類外不克不及拜訪protected成員
  cout << b.a3 << endl;   //毛病,類外不克不及拜訪private成員
  system("pause");
  return 0;
}

2.protected繼續:

代碼以下:

#include<iostream>
#include<assert.h>
using namespace std;
class A{
public:
  int a;
  A(){
    a1 = 1;
    a2 = 2;
    a3 = 3;
    a = 4;
  }
  void fun(){
    cout << a << endl;    //准確
    cout << a1 << endl;   //准確
    cout << a2 << endl;   //准確
    cout << a3 << endl;   //准確
  }
public:
  int a1;
protected:
  int a2;
private:
  int a3;
};
class B : protected A{
public:
  int a;
  B(int i){
    A();
    a = i;
  }
  void fun(){
    cout << a << endl;       //准確,public成員。
    cout << a1 << endl;       //准確,基類的public成員,在派生類中釀成了protected,可以被派生類拜訪。
    cout << a2 << endl;       //准確,基類的protected成員,在派生類中照樣protected,可以被派生類拜訪。
    cout << a3 << endl;       //毛病,基類的private成員不克不及被派生類拜訪。
  }
};
int main(){
  B b(10);
  cout << b.a << endl;       //准確。public成員
  cout << b.a1 << endl;      //毛病,protected成員不克不及在類外拜訪。
  cout << b.a2 << endl;      //毛病,protected成員不克不及在類外拜訪。
  cout << b.a3 << endl;      //毛病,private成員不克不及在類外拜訪。
  system("pause");
  return 0;
}

3.private繼續:

代碼以下:

#include<iostream>
#include<assert.h>
using namespace std;
class A{
public:
  int a;
  A(){
    a1 = 1;
    a2 = 2;
    a3 = 3;
    a = 4;
  }
  void fun(){
    cout << a << endl;    //准確
    cout << a1 << endl;   //准確
    cout << a2 << endl;   //准確
    cout << a3 << endl;   //准確
  }
public:
  int a1;
protected:
  int a2;
private:
  int a3;
};
class B : private A{
public:
  int a;
  B(int i){
    A();
    a = i;
  }
  void fun(){
    cout << a << endl;       //准確,public成員。
    cout << a1 << endl;       //准確,基類public成員,在派生類中釀成了private,可以被派生類拜訪。
    cout << a2 << endl;       //准確,基類的protected成員,在派生類中釀成了private,可以被派生類拜訪。
    cout << a3 << endl;       //毛病,基類的private成員不克不及被派生類拜訪。
  }
};
int main(){
  B b(10);
  cout << b.a << endl;       //准確。public成員
  cout << b.a1 << endl;      //毛病,private成員不克不及在類外拜訪。
  cout << b.a2 << endl;      //毛病, private成員不克不及在類外拜訪。
  cout << b.a3 << endl;      //毛病,private成員不克不及在類外拜訪。
  system("pause");
  return 0;
}

經由過程以上的代碼都備有較為詳實的正文,讀者應當可以或許懂得。細心看代碼中派生類B中界說了和基類同名的成員a,此時基類的a依然存在,可以驗證。

int main(){
  cout << sizeof(A) << endl;
  cout << sizeof(B) << endl;

  system("pause");
  return 0;
}

輸入:

16

20

所以派生類包括了基類一切成員和新增的成員,同名的成員被隱蔽起來,挪用的時刻只會挪用派生類中的成員。

假如要挪用基類的同名成員,可以用以下辦法:

int main(){

  B b(10);
  cout << b.a << endl;
  cout << b.A::a << endl;

  system("pause");
  return 0;
}

輸入:

10

4

記得這裡是在類外拜訪,而a在基類中是public,所以繼續方法應當為public,使得a在派生類中依然為public,在類外可以拜訪。

感興致的讀者可以調試運轉一下本文實例,加深印象的同時還會有新的收成。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved