欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ 的三種訪問權(quán)限與三種繼承方式

 更新時間:2016年11月04日 17:23:38   投稿:mrr  
我們知道C++中的類,有三種訪問權(quán)限(也稱作訪問控制),它們分別是public、protected、private,C++中繼承的方式還有多種。下面通過本文給大家詳細介紹,對c++中的訪問權(quán)限和繼承方式感興趣的朋友一起看看吧

三種訪問權(quán)限

我們知道C++中的類,有三種訪問權(quán)限(也稱作訪問控制),它們分別是public、protected、private。要理解它們其實也很容易,看下面了一個例子。

父類:

class Person
{
public:
Person(const string& name, int age) : m_name(name), m_age(age)
{
}
void ShowInfo()
{
cout << "姓名:" << m_name << endl;
cout << "年齡:" << m_age << endl;
}
protected:
string m_name; //姓名
private:
int m_age; //年齡
};
class Person
{
public:
Person(const string& name, int age) : m_name(name), m_age(age)
{
}
void ShowInfo()
{
cout << "姓名:" << m_name << endl;
cout << "年齡:" << m_age << endl;
}
protected:
string m_name; //姓名
private:
int m_age; //年齡
};

子類:

class Teacher : public Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類可見
cout << "姓名:" << m_name << endl; //正確,protected屬性子類可見
cout << "年齡:" << m_age << endl; //錯誤,private屬性子類不可見
cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員
}
private:
string m_title; //職稱
};
class Teacher : public Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類可見
cout << "姓名:" << m_name << endl; //正確,protected屬性子類可見
cout << "年齡:" << m_age << endl; //錯誤,private屬性子類不可見
cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員
}
private:
string m_title; //職稱
};

調(diào)用方法:

void test()
{
Person person("張三", 22);
person.ShowInfo(); //public屬性,對外部可見
cout << person.m_name << endl; //protected屬性,對外部不可見
cout << person.m_age << endl; //private屬性,對外部不可見
}
void test()
{
Person person("張三", 22);
person.ShowInfo(); //public屬性,對外部可見
cout << person.m_name << endl; //protected屬性,對外部不可見
cout << person.m_age << endl; //private屬性,對外部不可見
}

總結(jié)

我們對C++類三種方式控制權(quán)限總結(jié)如下,這與Java中的三種對應(yīng)的訪問權(quán)限是一樣的。

qq%e6%88%aa%e5%9b%be20161104113813

三種繼承方式

C++中繼承的方式還有多種,也分別都用public、protected、private表示。這與Java不一樣,Java只有繼承的概念,默認是public繼承的。

1. 三種繼承方式不影響子類對父類的訪問權(quán)限,子類對父類只看父類的訪問控制權(quán)。

如下面三種繼承方式都能訪問父類中的public和protected成員。

class Teacher : /*public*/ /*protected*/ private Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類可見
cout << "姓名:" << m_name << endl; //正確,protected屬性子類可見
//cout << "年齡:" << m_age << endl; //錯誤,private屬性子類不可見
cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員
}
private:
string m_title; //職稱
};
class Teacher : /*public*/ /*protected*/ private Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類可見
cout << "姓名:" << m_name << endl; //正確,protected屬性子類可見
//cout << "年齡:" << m_age << endl; //錯誤,private屬性子類不可見
cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員
}
private:
string m_title; //職稱
};

2. 繼承方式是為了控制子類(也稱派生類)的調(diào)用方(也叫用戶)對父類(也稱基類)的訪問權(quán)限。

public繼承

class Teacher : public Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類可見
cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員
}
private:
string m_title; //職稱
};
class Teacher : public Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類可見
cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員
}
private:
string m_title; //職稱
};
void TestPublic()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo();
cout << endl;
teacher.ShowTeacherInfo();
}
void TestPublic()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo();
cout << endl;
teacher.ShowTeacherInfo();
}

結(jié)果:

姓名:李四
年齡:35

姓名:李四
年齡:35
職稱:副教授

private繼承:

class Teacher : private Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類可見
cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員
}
private:
string m_title; //職稱
};
class Teacher : private Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類可見
cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員
}
private:
string m_title; //職稱
};
void TestPrivate()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo(); //錯誤,因為Teacher采用了private的繼承方式,外部不可訪問。
cout << endl;
teacher.ShowTeacherInfo();
}
void TestPrivate()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo(); //錯誤,因為Teacher采用了private的繼承方式,外部不可訪問。
cout << endl;
teacher.ShowTeacherInfo();
}

3. public、protected、private三種繼承方式,相當(dāng)于把父類的public訪問權(quán)限在子類中變成了對應(yīng)的權(quán)限。

如protected繼承,把父類中的public成員在本類中變成了protected的訪問控制權(quán)限;private繼承,把父類的public成員和protected成員在本類中變成了private訪問控制權(quán)。

protected繼承:

class Teacher : protected Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類可見
cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員
}
private:
string m_title; //職稱
};
class Teacher : protected Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類可見
cout << "職稱:" << m_title << endl; //正確,本類中可見自己的所有成員
}
private:
string m_title; //職稱
};
void TestProtected()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo(); //錯誤,基類Person的ShowInfo此時對Teacher相當(dāng)于protected的,外部不可以被訪問
cout << endl;
teacher.ShowTeacherInfo();
}
void TestProtected()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo(); //錯誤,基類Person的ShowInfo此時對Teacher相當(dāng)于protected的,外部不可以被訪問
cout << endl;
teacher.ShowTeacherInfo();
}
class Leader : public Teacher
{
public:
Leader(const string& name, int age, const string& title, string position)
: Teacher(name, age, title), m_position(position)
{
}
void ShowLeaderInfo()
{
ShowInfo(); //基類Person的ShowInfo此時相當(dāng)于protected的,但子類仍可以訪問
ShowTeacherInfo(); //ShowTeacherInfo仍然是public的,可以訪問
cout << m_position << endl;
}
private:
string m_position;
};
class Leader : public Teacher
{
public:
Leader(const string& name, int age, const string& title, string position)
: Teacher(name, age, title), m_position(position)
{
}
void ShowLeaderInfo()
{
ShowInfo(); //基類Person的ShowInfo此時相當(dāng)于protected的,但子類仍可以訪問
ShowTeacherInfo(); //ShowTeacherInfo仍然是public的,可以訪問
cout << m_position << endl;
}
private:
string m_position;
};

以上所述是小編給大家介紹的C++ 的三種訪問權(quán)限與三種繼承方式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C++ set的使用方法詳解

    C++ set的使用方法詳解

    這篇文章主要介紹了C++ set的使用方法詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握set的使用方法,需要的朋友可以參考下
    2017-10-10
  • c/c++單例模式類的混合編譯案例詳解

    c/c++單例模式類的混合編譯案例詳解

    ? 由于c語言中沒有類的概念,因此對于有類的cpp文件與c文件混合編譯時,提供一個中間層提供類的操作接口,在c文件中調(diào)用接口實現(xiàn)間接操作類對象,這篇文章主要介紹了c/c++單例模式類的混合編譯的相關(guān)資料
    2022-10-10
  • C語言結(jié)構(gòu)體數(shù)組常用的三種賦值方法(包含字符串)

    C語言結(jié)構(gòu)體數(shù)組常用的三種賦值方法(包含字符串)

    C語言只有在定義字符數(shù)組的時候才能用“=”來初始化變量,其它情況下是不能直接用“=”來為字符數(shù)組賦值的,下面這篇文章主要給大家介紹了關(guān)于C語言結(jié)構(gòu)體數(shù)組常用的三種賦值方法,需要的朋友可以參考下
    2022-06-06
  • C語言實現(xiàn)學(xué)生信息管理系統(tǒng)(文件版)

    C語言實現(xiàn)學(xué)生信息管理系統(tǒng)(文件版)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語言版飛機大戰(zhàn)游戲

    C語言版飛機大戰(zhàn)游戲

    這篇文章主要為大家詳細介紹了C語言版飛機大戰(zhàn)游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • opencv實現(xiàn)機器視覺檢測和計數(shù)的方法

    opencv實現(xiàn)機器視覺檢測和計數(shù)的方法

    在機器視覺中,有時需要對產(chǎn)品進行檢測和計數(shù)。其難點無非是對于產(chǎn)品的圖像分割。本文就來介紹一下機器視覺檢測和計數(shù)的實現(xiàn),感興趣的可以參考一下
    2021-05-05
  • 徹底掌握C語言strcat函數(shù)的用法

    徹底掌握C語言strcat函數(shù)的用法

    strcat是用來拼接字符串的,它會將參數(shù)?src?字符串復(fù)制到參數(shù)?dest?所指的字符串尾部,本章帶你了解它的使用并模擬實現(xiàn)它
    2022-05-05
  • 利用C++ R3層斷鏈實現(xiàn)模塊隱藏功能

    利用C++ R3層斷鏈實現(xiàn)模塊隱藏功能

    在R3層的模塊隱藏,我們需要做的就是將其該鏈表斷鏈,將某一模塊從這個雙向鏈表中摘除,這樣再調(diào)用傳統(tǒng)的API時就會搜索不到。本文重點給大家介紹利用C++ R3層斷鏈實現(xiàn)模塊隱藏功能,感興趣的朋友一起看看吧
    2019-10-10
  • C++中為何推薦要把基類析構(gòu)函數(shù)設(shè)置成虛函數(shù)

    C++中為何推薦要把基類析構(gòu)函數(shù)設(shè)置成虛函數(shù)

    這篇文章主要介紹了C++中為何推薦要把基類析構(gòu)函數(shù)設(shè)置成虛函數(shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 深入了解C語言指針

    深入了解C語言指針

    這篇文章主要介紹了C語言指針詳解及用法示例,介紹了其相關(guān)概念,然后分享了幾種用法,具有一定參考價值。需要的朋友可以了解下
    2021-07-07

最新評論