#include <iostream> |
#include <string> |
using namespace std; |
class CBase { |
string name; |
int age; |
public: |
string getName() { |
return name; |
} |
int getAge() { |
return age; |
} |
protected: |
void setName(string s) { |
name = s; |
} |
void setAge(int i) { |
age = i; |
} |
}; |
class CPublicDerive : public CBase { //用 public 指定公有繼承 |
public: |
void setBase(string s, int i) { |
setName(s); //調用基類的保護成員 |
setAge(i); //調用基類的保護成員 |
//調用基類的私有成員 |
//cout << name << " " << age << endl; //編譯出錯 |
} |
}; |
class CProtectDerive : protected CBase { //用 protected 指定保護繼承 |
public: |
void setBase(string s, int i) { |
setName(s); //調用基類的保護成員 |
setAge(i); //調用基類的保護成員 |
//調用基類的私有成員 |
//cout << name << " " << age << endl; //編譯出錯 |
} |
string getBaseName() { |
return getName(); //調用基類的公有成員 |
} |
int getBaseAge() { |
return getAge(); //調用基類的公有成員 |
} |
}; |
class CPrivateDerive : private CBase { //用 private 指定私有繼承,private可以省略 |
public: |
void setBase(string s, int i) { |
setName(s); //調用基類的保護成員 |
setAge(i); //調用基類的保護成員 |
//調用基類的私有成員 |
//cout << name << " " << age << endl; //編譯出錯 |
} |
string getBaseName() { |
return getName(); //調用基類的公有成員 |
} |
int getBaseAge() { |
return getAge(); //調用基類的公有成員 |
} |
}; |
int main ( ) |
{ |
// 公有繼承 |
CPublicDerive cpublic; |
cpublic.setBase("public", 1); |
//調用基類的私有成員 |
//cout << cpublic.name << " " << cpublic.age << endl; //編譯出錯 |
//調用基類的公有成員 |
cout << cpublic.getName() << " " << cpublic.getAge() << endl; |
//調用基類的保護成員 |
//cpublic.setName("xyz"); //編譯出錯 |
//cpublic.setAge(20); //編譯出錯 |
// 保護繼承 |
CProtectDerive cprotect; |
cprotect.setBase("protect", 2); |
//調用基類的公有成員 |
//cout << cprotect.getName() << " " << cprotect.getAge() << endl; //編譯出錯 |
cout << cprotect.getBaseName() << " " << cprotect.getBaseAge() << endl; |
//調用基類的保護成員 |
//cprotect.setName("xyz"); //編譯出錯 |
//cprotect.setAge(20); //編譯出錯 |
// 私有繼承 |
CPrivateDerive cprivate; |
cprivate.setBase("private", 3); |
//調用基類的公有成員 |
//cout << cprivate.getName() << " " << cprivate.getAge() << endl; //編譯出錯 |
cout << cprivate.getBaseName() << " " << cprivate.getBaseAge() << endl; |
//調用基類的保護成員 |
//cprivate.setName("xyz"); //編譯出錯 |
//cprivate.setAge(20); //編譯出錯 |
// 隐式類型轉換 |
CBase &cbase = cpublic; |
// cbase.setName("xyz"); //編譯出錯 |
// cbase.setAge(20); //編譯出錯 |
cout << cbase.getName() << " " << cbase.getAge() << endl; |
return 0; |
} |