派生類環境中基類物件不能訪問自己的保護成員
#include <iostream>
using namespace std;
class Base
{
protected :
int a;
};
class Derived : public Base
{
public :
int d;
void g()
{
cout << a << endl; // 這個是在派生類環境中直接操控保護成員
}
void f()
{
Base b;
b.a= 100;// 這裡根本不允許訪問自己的 保護成員
cout << "jack : " << b.a << endl;
return ;
}
};
int main(void)
{
Derived d;
d.g();
//d.f();
return 0;
}
/*
這個問題是這樣的(我想的) :
在派生類環境中,派生類可以直接操控保護成員。
但不能通過基類物件來操控基類物件的保護成員,
即若有基類物件,該基類物件無權訪問自己的保護成員。
不確定我的猜想是不是正確的,我暫時沒找著權威的說法 ,希望得到權威性的解答,或者相關的資訊
*/
相關推薦
派生類環境中基類物件不能訪問自己的保護成員
// 發現這樣一個問題 ,程式如下 #include <iostream> using namespace std; class Base { protected :int a; }; class Derived : public Base { public
公有繼承中派生類Student對基類Person成員的訪問
題目內容:已知基類Person的定義如下:class Person{ char Name[20];char Sex;int Age;public:void Register(char *name, int age, char sex) ;void ShowMe();};請通過
詳解C++中基類與派生類的轉換以及虛基類
原文來源:https://www.jb51.net/article/72586.htm# C++基類與派生類的轉換 在公用繼承、私有繼承和保護繼承中,只有公用繼承能較好地保留基類的特徵,它保留了除建構函式和解構函式以外的基類所有成員,基類的公用或保護成員的訪問許可權在派生類中全部都按原樣保留下來
定義點類,並以點類為基類,派生出直線類,從基類中繼承的點的資訊表示直線的中點。
#include<iostream> #include<cmath> using namespace std; class Point //定義座標點類 { public: //定義必要的建構函式 Point(double a=0,d
C++中派生類重寫基類過載函式時需要注意的問題:派生類函式遮蔽基類中同名函式
派生類可以繼承基類中的非私有函式成員,當然也就可以繼承其中非私有的被過載的函式。如下: 【參考程式碼】 class Base { public: void print() { cout << "print() in Base." <<
虛析構函數,派生類調用基類構造方法
div pub urn new turn col blog 徹底 () #include <iostream> using namespace std; class A{ public: A() { cout<<"construct A
C++中基類虛析構函數的作用及其原理分析
art 收回 顯示 就是 靜態綁定 運行 style 轉載 調用父類 虛析構函數的理論前提是 執行完子類的析構函數,那麽父類的虛構函數必然會被執行。 那麽當用delete釋放一個父類指針所實例化的子類對象時,如果沒有定義虛析構函數,那麽將只會調用父類的析構函數,而不會調用子
C++中基類的解構函式為什麼要用virtual虛解構函式【轉】
(轉自:https://blog.csdn.net/iicy266/article/details/11906457) 知識背景 要弄明白這個問題,首先要了解下C++中的動態繫結。&n
關於Java中基類構造器的呼叫問題
在《Java程式設計思想》第7章複用類中有這樣一段話,值得深思。當子類繼承了父類時,就涉及到了基類和匯出類(子類)這兩個類。從外部來看,匯出類就像是一個與基類具有相同介面的新類,或許還會有一些額外的方法和域。但繼承並不只是複製基類的介面。當建立一個匯出類物件時,該物件包含了一個基類的子物件,這個子物件與你用
關於Java中基類構造器的調用問題
ESS java編程思想 後者 draw netty 提升自己 復制 struct rto 在《Java編程思想》第7章復用類中有這樣一段話,值得深思。當子類繼承了父類時,就涉及到了基類和導出類(子類)這兩個類。從外部來看,導出類就像是一個與基類具有相同接口的新類,或許還會
C++中基類的解構函式為什麼要用virtual虛解構函式
知識背景 要弄明白這個問題,首先要了解下C++中的動態繫結。 正題 直接的講,C++中基類採用virtual虛解構函式是為了防止記憶體洩漏。具體地說,如果派生類中申請了記憶體空間,並在其解構函式中對這些記憶體空間進行釋放
C++類模板中如何正確的訪問同是類模板的父類中的成員?
1 C++類模板中如何正確的訪問同是類模板的父類中的成員(g++編譯器)? 先看如下程式碼: #include <iostream> using namespace std; template < typename T > class
【程式語言】C++繼承和派生類、虛基類
從已有的物件型別出發建立一種新的物件型別,使它部分或全部繼承原物件的特點和功能,這是面向物件設計方法中的基本特性之一。繼承不僅簡化了程式設計方法,顯著提高了軟體的重用性,而且還使得軟體更加容易維護。派生則是繼承的直接產物,它通過繼承已有的一個或多個類來產生一個新的類,通過派生
C++初始化列表問題,類中有一個物件型別的陣列成員變數,在初始化列表中初始化時報錯“[]”操作符語法錯誤
陣列作為成員變數時只有預設初始化,也就是無法傳遞引數。有兩種變通方案:你可以把物件陣列改成指標陣列,或者把ClassB類的構造和初始化分開。 方案一: class ClassA{ private: ClassB* arrayOfObjectClassB[2];
26.用結構體替代類-golang中的面向物件
歡迎訪問Golang 系列教程中的第26章。 是否面向物件? go不是一個純面向物件的程式語言。從 “Go’s FAQs” (go 常見問題解答)中取出的摘錄回答了go 是否為面向物件的問題。 Yes and no. Although Go has
C++派生類函式呼叫基類的函式
在MFC的程式中,我們經常會看到下面的程式片段, 片段一: BOOL CClassDlg::OnInitDialog() { CDialog::OnInitDialog(); //。。。。 //。。。。 AddTr
【Python】Python中基類函式的過載和基類函式的呼叫
剛接觸Python語言的時間不長,對於這個語言的很多特性並不是很瞭解,有很多用法都是還不知道。今天想著寫一個Python面向物件程式設計時的繼承中的函式呼叫。分享出來,一起進步。 因為之前接觸過Java和C++,所有對於面向物件的思想也早已經很熟析的了。這裡也不再對面向物件
Puppet數據類型中[數值類型,數組的使用] (十四)
puppet數據類型中[數值類型 數組的使用] (十四) 本文主要寫puppet的數據類型中的數值類型和數組的使用,博主puppet為3.8版本,puppet數組的追加功能測試沒有成功,官網也沒有給出示例,確定是否已經優化或者取消.官網數據類型連接地址https://docs.pupp
Python的程序結構[2] -> 類/class -> 基類與繼承
cnblogs times creat logs roman man pos 程序 body 基類與繼承 / Base Class and Inheritance Class 面向對象的特性使得 Python 中不可避免地需要使用到類和類的繼承,類的繼承可以使得代碼很好的
python(七):元類與抽象基類
imp 匿名 exec int 上下文 增加 abstract 分割 als 一、實例創建 在創建實例時,調用__new__方法和__init__方法,這兩個方法在沒有定義時,是自動調用了object來實現的。python3默認創建的類是繼承了object。 c