public private, protect. 以及继承。 草稿。
#include <iostream>
#include <thread>
#include <memory>
// | 父类的public成员 | 父类的protected成员 | 父类的private成员
//---------------|------------------|---------------------|-----------------
//public继承 | public | protected | 访问不到
//---------------|------------------|---------------------|-----------------
//protected继承 | protected | protected | 访问不到
//---------------|------------------|---------------------|-----------------
//private继承 | private | private | 访问不到
using namespace std;
class Book
{
public:
string signture;
//virtual void showInfo() 不虚化,继承类如使用,基类指针,会调用基类方法.出错.
//除非使用派生类指针.非虚函数.会优先使用指针所定义的类型的方法(假如同名)
//从设计上说.这个就是程序本身错误的设计.继承的意义,就是继承类行为像一个基类,同名函数,而又不虚化,那么继承类中的同名非虚化函数就不应该存在.
//如果非要存在.就说明继承类行为上就不像一个基类.他们就不是继承关系.
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):name(_name),cost(_c),price(_p),supplier(_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;
}
}
private:
string name;
int cost;
int price;
string supplier;
};
//根据设计规范,只推荐book 和englichbook 继承一个抽象类.
//这里就english就强烈依赖book了.连showinfo.都没办法自定义.
class EnglichBook:public Book
{
public:
void showInfo()
{
cout<<"Tax:"<<tax<<". ";
Book::showInfo();
}
EnglichBook(const string& _name,int _c,int _p,const string& _s,int _tax):Book(_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();
EnglichBook cppEN=EnglichBook("c++ primer[EN]",20,50,"bird public",5);
Book* pcppen=&cppEN;
cppEN.showInfo();
pcppen->showInfo();//同名函数,且又不对基类函数虚化,产生的危害.
}
//public:任何函数都可以访问任何此类对象的public成员.
//private:就是说外部函数不可访问任何此类对象的私有成员.而类的内部函数可以访问任何此类对象的私有成员.
//protect:就是说外部函数不可访问任何此类对象的私有成员.而继承类类的内部函数可以访问任何此继承类对象的私有成员.
//但继承类的内部函数不可以访问基类的protect成员.
1.fun()==>fun(b* a)
2.fun(T*)==>fun(b* a,b* b)
如1,可以访问a的私有。那么也可以访问b的私有。
3.fun()==>fun(d* a)
4.fun(b*)==>fun(b* a,d* b)
如1,访问a的私有。但fun是继承类的函数。就不能访问除
不管基类还是继承类。他们的函数都只能访问本类产生出的对象的私有和protect。
也就是继承类不能访问基类对象的私有或protect对象。
public private, protect. 以及继承。 草稿。的更多相关文章
- C++ public private protect 继承关系(链接)
基础链接 总结: public继承基类成员访问权限没有变化; protected继承基类public和protected权限变为protected,基类private不变. private继承基类p ...
- public private protect
public 公有 使用public意味着声明public之后的成员对每个人都是可用的 private 私有 除非必须公开底层实现细目,否则就应该将所有的域指定为private protect 继 ...
- Public Private Protect Inheritance and access specifiers
In the previous lessons on inheritance, we've been making all of our data members public in order to ...
- c++三种继承方式public,protect,private
C++中的三种继承public,protected,private 三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员 ...
- public、protect、private在父类子类中使用
先贴出一张,直观的.估计大家都见过的关于public.protect.private的范围图 作用域 当前类 同一package 子孙类 其他package public T ...
- c/c++再学习:C++中public、protect、private的访问权限控制
C++中public.protect.private的访问权限控制 访问权限 一个类的public成员变量.成员函数,可以通过类的成员函数.类的实例变量进行访问 一个类的protected成员变量.成 ...
- c++ 之private /protect/ public
C++中public.protect.private的访问权限控制 访问权限 一个类的public成员变量.成员函数,可以通过类的成员函数.类的实例变量进行访问 一个类的protected成员变量.成 ...
- C++中public,protected,private派生类继承问题和访问权限问题
C++中public,protected,private派生类继承问题和访问权限问题 当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定. 1. ...
- 【转】C++易混知识点5:实例讲解Public Protected Private作用域,继承的区别和用意
大学生涯,涉及到类的作用域,继承都是用的public 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问.没有深究.其实这里面真是 ...
随机推荐
- [Vuejs] 关于vue-router里面的subRoutes
刚学习vue,可能有使用不对的地方,希望没有对大家造成困扰! 使用vue-router,为了能够更好的管理.vue文件,需要用到子路由. 先看个错误的例子 routers.js '/company': ...
- hashCode的作用
在一般的应用中你不需要了解hashCode的用法,但当你用到HashMap,HashSet等集合类时要注意下hashCode. 你想通过一个object的key来拿HashMap的value, ...
- XE5 修复 安卓 输入法隐藏 后 无法退出的问题 3.2
欢迎到 ① FireMonkey[DELPHI XE5] 165232328 交流开发技术. (************************************************** ...
- 如何让 XE5 发现你的手机
首发在 ① FireMonkey[DELPHI XE5] 165232328 欢迎使用 FMX 开发手机程序的高手来访. 1. 手机开启 USB 调试.不用 ROOT.2. 装驱动.(问题就在这里) ...
- 使用bat/vbs/ahk对Windows下进行自动化操作
回想90年代,我们在DOS下使用各种命令链对操作进行简化和自动化,如DOS 5.0添加的DosKey,利用管道和重定向对多组命令进行链式操作.后来使用了Ubuntu和其它Linux发型版后,bash下 ...
- ToolTipController 事件触发显示时 避免闪烁的处理方法
private DevExpress.Utils.ToolTipController toolTipController1; private DevExpress.Utils.ToolTipContr ...
- 手机sdk 开发
题记:很多做游戏开发的人,估计都或多或少地接过渠道SDK,什么UC,当乐,91,小米,360......据统计国内市场当前不下于100家渠道,还包括一些没有SDK的小渠道.每个渠道SDK接入的方法呢, ...
- Custom work flow
http://runjs.cn/detail/99epj1t2 http://www.cqroad.cn/ https://jsplumbtoolkit.com/demo/flowchart/dom. ...
- input 的blur事件之后button的onclick事件不执行解决方案
最近发现网页程序中有个BUG,就是在input标签输入框中输入完数据后,直接点击“取消” 按钮的时候.出现网页崩死的情况: 经过小主酸菜我,各种方法的尝试后,找到一个初步可以解决的方案,在这里分享给大 ...
- redis和memcached
Redis 1.主从配置(主从复制不会阻塞master.) 1)bind 192.168.1.2(请修改成本机的IP地址,要不然,客户端无法进行访问) 2)slaveof 192.168.1.1 6 ...