public protect private. 草稿。
#include <iostream> #include <thread> #include <memory> // | 父类的public成员 | 父类的protected成员 | 父类的private成员 //---------------|------------------|---------------------|----------------- //public继承 | public | protected | 访问不到 //---------------|------------------|---------------------|----------------- //protected继承 | protected | protected | 访问不到 //---------------|------------------|---------------------|----------------- //private继承 | private | private | 访问不到 using namespace std; class ibook { public: string signture; ibook(const string& _name,int _c,int _p,const string& _s):name(_name),cost(_c),price(_p),supplier(_s){} protected: string name; int cost; int price; string supplier; }; class Book: public ibook { public: void showInfo() { cout<<"book name:"<<name<<". price:"<<price<<". cost:"<<cost<<". supplier:"<<supplier<<". signtrue:"<<signture<<endl; } Book(const string& _name,int _c,int _p,const string& _s):ibook(_name,_c,_p,_s){} void SetCost(int _cost,int passWord) { if(passWord==123) { //private:只有book类的函数才可以访问.这里访问主体是book::SetCost(int,int,Book* this).访问对象是this->cost. //虽然把setcost方法变成了public.但是我们可以利用函数的参数,要求输入密码.体现了类的封装性. cost=_cost; } } //可修改的参数,使用指针,不建议写成Book&, 参考google c++ 代码规范. void SetOtherCost(int _cost,int passWord, Book* myBook) { if(passWord==123) { //这里访问主体是Book::SetOtherCost(int,int, Book* myBook,Book* this).访问对象是*myBook和*this. myBook->cost=_cost; cost=_cost; } } }; //根据设计规范,只推荐book 和englichbook 继承一个抽象类. //这里就english就强烈依赖book了.连showinfo.都没办法自定义. class EnglichBook:public ibook { public: void showInfo() { cout<<"book name:"<<name<<". price:"<<price<<". cost:"<<cost<<". supplier:"<<supplier<<". signtrue:"<<signture<<endl; } EnglichBook(const string& _name,int _c,int _p,const string& _s,int _tax):ibook(_name,_c,_p,_s),tax(_tax){} private: int tax; }; //public:任何函数都可以访问任何此类对象的public成员. //private:就是说外部函数不可访问任何此类对象的私有成员.而类的内部函数可以访问任何此类对象的私有成员. int main() { Book cpp=Book("c++ primer",20,50,"bird public"); cpp.showInfo(); cpp.signture=string("linson's book");//public:任何函数都可以访问.这里访问主体是main().访问对象是cpp.signture //cpp.cost=5;//error. private:只有book类的函数才可以访问. cpp.showInfo(); //密码错误,修改无效 cpp.SetCost(15,33); cpp.showInfo(); //密码ok cpp.SetCost(15,123); cpp.showInfo(); Book cSharp=Book("c# good",10,20,"bird public"); //可以通过一个对象来访问另外一个对象的private私有成员.为什么.我们进入函数,分析一下. cSharp.SetOtherCost(10,123,&cpp); cpp.showInfo(); cSharp.showInfo(); }