最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

三種訪問(wèn)權(quán)限

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

父類(lèi):

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; //年齡
};

子類(lèi):

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

調(diào)用方法:

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

總結(jié)

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

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

三種繼承方式

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

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

如下面三種繼承方式都能訪問(wèn)父類(lèi)中的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屬性子類(lèi)可見(jiàn)
cout << "姓名:" << m_name << endl; //正確,protected屬性子類(lèi)可見(jiàn)
//cout << "年齡:" << m_age << endl; //錯(cuò)誤,private屬性子類(lèi)不可見(jiàn)
cout << "職稱(chēng):" << m_title << endl; //正確,本類(lèi)中可見(jiàn)自己的所有成員
}
private:
string m_title; //職稱(chēng)
};
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屬性子類(lèi)可見(jiàn)
cout << "姓名:" << m_name << endl; //正確,protected屬性子類(lèi)可見(jiàn)
//cout << "年齡:" << m_age << endl; //錯(cuò)誤,private屬性子類(lèi)不可見(jiàn)
cout << "職稱(chēng):" << m_title << endl; //正確,本類(lèi)中可見(jiàn)自己的所有成員
}
private:
string m_title; //職稱(chēng)
};

2. 繼承方式是為了控制子類(lèi)(也稱(chēng)派生類(lèi))的調(diào)用方(也叫用戶(hù))對(duì)父類(lèi)(也稱(chēng)基類(lèi))的訪問(wèn)權(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屬性子類(lèi)可見(jiàn)
cout << "職稱(chēng):" << m_title << endl; //正確,本類(lèi)中可見(jiàn)自己的所有成員
}
private:
string m_title; //職稱(chēng)
};
class Teacher : public Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類(lèi)可見(jiàn)
cout << "職稱(chēng):" << m_title << endl; //正確,本類(lèi)中可見(jiàn)自己的所有成員
}
private:
string m_title; //職稱(chēng)
};
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
職稱(chēng):副教授

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屬性子類(lèi)可見(jiàn)
cout << "職稱(chēng):" << m_title << endl; //正確,本類(lèi)中可見(jiàn)自己的所有成員
}
private:
string m_title; //職稱(chēng)
};
class Teacher : private Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類(lèi)可見(jiàn)
cout << "職稱(chēng):" << m_title << endl; //正確,本類(lèi)中可見(jiàn)自己的所有成員
}
private:
string m_title; //職稱(chēng)
};
void TestPrivate()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo(); //錯(cuò)誤,因?yàn)門(mén)eacher采用了private的繼承方式,外部不可訪問(wèn)。
cout << endl;
teacher.ShowTeacherInfo();
}
void TestPrivate()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo(); //錯(cuò)誤,因?yàn)門(mén)eacher采用了private的繼承方式,外部不可訪問(wèn)。
cout << endl;
teacher.ShowTeacherInfo();
}

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

如protected繼承,把父類(lèi)中的public成員在本類(lèi)中變成了protected的訪問(wèn)控制權(quán)限;private繼承,把父類(lèi)的public成員和protected成員在本類(lèi)中變成了private訪問(wèn)控制權(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屬性子類(lèi)可見(jiàn)
cout << "職稱(chēng):" << m_title << endl; //正確,本類(lèi)中可見(jiàn)自己的所有成員
}
private:
string m_title; //職稱(chēng)
};
class Teacher : protected Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正確,public屬性子類(lèi)可見(jiàn)
cout << "職稱(chēng):" << m_title << endl; //正確,本類(lèi)中可見(jiàn)自己的所有成員
}
private:
string m_title; //職稱(chēng)
};
void TestProtected()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo(); //錯(cuò)誤,基類(lèi)Person的ShowInfo此時(shí)對(duì)Teacher相當(dāng)于protected的,外部不可以被訪問(wèn)
cout << endl;
teacher.ShowTeacherInfo();
}
void TestProtected()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo(); //錯(cuò)誤,基類(lèi)Person的ShowInfo此時(shí)對(duì)Teacher相當(dāng)于protected的,外部不可以被訪問(wèn)
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(); //基類(lèi)Person的ShowInfo此時(shí)相當(dāng)于protected的,但子類(lèi)仍可以訪問(wèn)
ShowTeacherInfo(); //ShowTeacherInfo仍然是public的,可以訪問(wèn)
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(); //基類(lèi)Person的ShowInfo此時(shí)相當(dāng)于protected的,但子類(lèi)仍可以訪問(wèn)
ShowTeacherInfo(); //ShowTeacherInfo仍然是public的,可以訪問(wèn)
cout << m_position << endl;
}
private:
string m_position;
};

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

相關(guān)文章

最新評(píng)論

阳西县| 长宁县| 乌什县| 武乡县| 钦州市| 县级市| 北票市| 涞水县| 温泉县| 宽甸| 西乌| 稻城县| 百色市| 兰西县| 穆棱市| 德江县| 古丈县| 武乡县| 溧水县| 奇台县| 吉隆县| 保定市| 乌拉特后旗| 万宁市| 宁德市| 攀枝花市| 安阳县| 邯郸市| 诏安县| 东光县| 武宁县| 吉安市| 玉田县| 湛江市| 福安市| 崇义县| 阳原县| 和田县| 五原县| 鄂尔多斯市| 孟津县|