首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 繼承與訪問權限深度解析

     編輯:C++ 入門

基礎規則

  • 構造函數不繼承;派生類構造時調用基類構造,析構時調用基類析構,順序相反
  • 三種繼承方式對基類成員訪問性的影響:
    基類成員public 繼承protected 繼承private 繼承
    publicpublicprotectedprivate
    protectedprotectedprotectedprivate
    private不可訪問不可訪問不可訪問

典型例題分析

例 1:public vs protected 繼承

class Point { public: Point(double a,double b,double c){...} double Getx(){return x;} ... private: double x,y,z; };
class Line: public Point { // 或 protected Point
    public: Line(...):Point(...){...} void show(){ cout<

例 2:private 繼承與接口轉發

class Rectangle: private Point {
    public: void move(int xoff,int yoff){ Point::move(xoff,yoff); }
    int Getx(){ return Point::Getx(); } // 必須顯式調用基類作用域
};
// 派生類對象調用基類同名成員:obj.Base::func()
// 派生類成員函數中調用:Base::func()

支配規則總結

  1. 基類無法訪問派生類成員
  2. 同名成員優先派生類,需加基類作用域訪問基類版本
  3. 指針/引用的靜態類型決定可訪問成員範圍(切片現象)
  4. 友元不繼承

指針賦值陷阱

Base *pb = &derived_obj;
pb->f1(); // 調用 Base::f1(),因為 pb 靜態類型為 Base*
// 即使 Derived 覆蓋了 f1(),非虛函數不會多態

虛函數才能實現動態綁定,這是多態的前提。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved