C++Primer 第15章 OOP

it2025-02-07  10

C++Primer 第15章 OOP

#include<iostream> class Base { public: virtual void fun1(int i = 0) { std::cout << i << std::endl; } private: int a = 0; }; class Son :public Base { public: virtual void fun1(int i = 9) override final { std::cout << i << std::endl; } //fun2没有继续基类不能使用override //virtual void fun2(int i = 10) override //{ // std::cout << i << std::endl; //} virtual void fun3(int i = 3) { std::cout << i << std::endl; } private: }; class Grandson :public Son { public: //这里的函数因为其基类的该函数使用了final所以不能被覆盖 //virtual void fun1(int i = 9) override final //{ // std::cout << i << std::endl; //} private: }; int main() { Base b; b.fun1(10); Son s; s.fun1(); //s.a; 不可访问基类的私有成员。 Grandson gs; //这里调用Son的fun3,且需要为public继承,函数成员也应当为public gs.fun3(); //显式的执行其基类Base的函数fun1,public继承可以实现向上的转换调用 gs.Base::fun1(); std::cout << 0xE800 << std::endl; } #include<iostream> #include<string> using namespace std; class Base { public: virtual void public_fun() { cout << "base public_fun" << endl; } string public_val{ "public_val" }; protected: virtual void protected_fun(){ cout << "base protected_fun" << endl; } string protected_val{ "protected_val" }; private: virtual void private_fun(){ cout << "base private_fun" << endl; } string private_val{ "private_val" }; }; //对于成员来说,成员的访问级别与类的继承方式无关 class Public_son :public Base { public: string getpublic() { return public_val; } string getprotected() { return protected_val; } //int getprivate() { return private_val; } //不可访问私有成员 public: virtual void public_fun() { cout << "Public_son public_fun" << endl; } protected: virtual void protected_fun() { cout << "Public_son protected_fun" << endl; } private: virtual void private_fun() { cout << "Public_son private_fun" << endl; } }; class Protected_son :protected Base { public: string getpublic() { return public_val; } string getprotected() { return protected_val; } //int getprivate() { return private_val; } //不可访问私有成员 public: virtual void public_fun()override { cout << "Protected_son public_fun" << endl; } protected: virtual void protected_fun()override { cout << "Protected_son protected_fun" << endl; } private: virtual void private_fun()override { cout << "Protected_son private_fun" << endl; } }; class Private_son :private Base { public: string getpublic() { return public_val; } string getprotected() { return protected_val; } //int getprivate() { return private_val; } //不可访问私有成员 public: virtual void public_fun()override { cout << "Private_son public_fun" << endl; } protected: virtual void protected_fun()override { cout << "Private_son protected_fun" << endl; } private: virtual void private_fun()override { cout << "Private_son private_fun" << endl; } }; int main() { Base base; Public_son public_son; Protected_son protected_son; Private_son private_son; /***Public_son成员***/ //调用Base数据 cout << public_son.public_val << endl; //cout < public_son.protected_val << endl; //不可访问 //cout << public_son.private_val << endl; //不可访问 //显式Base调用数据 cout << public_son.Base::public_val << endl; //cout << public_son.Base::protected_val << endl; //不可访问 //cout << public_son.Base::private_val << endl; //不可访问 //调用函数 public_son.public_fun(); public_son.Base::public_fun(); //其他均不行 /***Protected_son成员,调用Base数据***/ //cout << protected_son.public_val << endl; //不可访问 //cout < protected_son.protected_val << endl; //不可访问 //cout << protected_son.private_val << endl; //不可访问 //显式调用Base的相应数据 //cout << protected_son.Base::public_val << endl; //不允许类型转换 //cout << protected_son.Base::protected_val << endl; //不可访问 //cout << protected_son.Base::private_val << endl; //不可访问 //调用函数 protected_son.public_fun(); //protected_son.Base::public_fun(); //不允许类型转换 /***Private_son成员,调用Base数据***/ //cout << private_son.public_val << endl; //不可访问 //cout < private_son.protected_val << endl; //不可访问 //cout << private_son.private_val << endl; //不可访问 //显式调用Base的相应数据 //cout << private_son.Base::public_val << endl; //不允许类型转换 //cout << private_son.Base::protected_val << endl; //不可访问 //cout << private_son.Base::private_val << endl; //不可访问 //调用函数 private_son.public_fun(); }
最新回复(0)