直接上**:
// 訪問控制與繼承
class base
void memfcn(base &b)
protected:
int protmem()
private:
char privmem()
};class pubderv : public base // 正確,派生類能訪問基類 protected 成員
// char g() // 錯誤,派生類不能訪問基類的 private 成員
void memfcn(base &b)
};class derivedfrompublic : public pubderv // 正確,protmem 在派生類 pubderv 中仍然是 protected
void memfcn(base &b)
};class protderv : protected base // 正確,派生類能訪問基類 protected 成員
// char g() // 錯誤,派生類不能訪問基類的 private 成員
void memfcn(base &b)
};class derivedfromprotected : public protderv // 正確,protmem 在派生類 protderv 中仍然是 protected
void memfcn(base &b)
};class privderv : private base // 正確,派生類能訪問基類 protected 成員
// char g() // 錯誤,派生類不能訪問基類的 private 成員
// using base::protmem; // 可以通過新增 using 宣告改變成員的可訪問性,新增到何種訪問控制符後即是何種訪問許可權,例為public
void memfcn(base &b)
};class derivedfromprivated : public privderv // 錯誤,protmem 在派生類 privderv 中是 privated
// void memfcn(base &b) // 錯誤
};
測試**:
void accesscontroltest()
友元和繼承:不能繼承友元關係,每個類負責控制各自成員的訪問許可權
// 友元和繼承,不能繼承友元關係,每個類負責控制各自成員的訪問許可權
class base1 ;
class sneaky : public base1
// 錯誤,clobber不能訪問 base 物件的 protected 成員
// friend void clobber(base1 &b)
int j;
};class pal // 正確,pal 是 base1 的友元
// int f2(sneaky s) // 錯誤,pal 不是 sneaky 的友元
int f3(sneaky s) // 正確,pal 是 base1 的友元 ???
};
參考 c++ primer 第五版 第15章 C 之 訪問控制與訪問控制的繼承
private 本類函式和友元函式可以訪問。protected 本類函式 友元函式和子類函式可以訪問。public 本類函式 友元函式 子類函式和本類的物件可以訪問。和公有繼承 保護繼承和私有繼承沒有關係,保護繼承和私有繼承影響的是子類的繼承關係。類繼承中的訪問控制 公有繼承 public 保護繼承...
訪問控制與繼承
每個類分別控制自己的成員初始化過程,與之類似,每個類還分別控制著其成員對於派生類來說是否可訪問。受保護的成員 乙個類使用protected關鍵字來宣告那些它希望與派生類分離但是不想被其他公共訪問使用的成員。1。和私有成員類似,受保護的成員對於類的使用者來說是不可訪問的。2。和公有成員類似,受保護的成...
訪問控制與繼承
繼承控制中 派生類成員對父類成員的訪問 父類public成員 父類protected成員 父類private成員 公有繼承 保護繼承 私有繼承 繼承控制中 派生類使用者對父類成員對的可訪問性 父類public成員 父類protected成員 父類private成員 公有繼承 保護繼承 私有繼承 備註...