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==)
{
//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==)
{
//这里访问主体是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",,,"bird public");
cpp.showInfo();
cpp.signture=string("linson's book");//public:任何函数都可以访问.这里访问主体是main().访问对象是cpp.signture
//cpp.cost=5;//error. private:只有book类的函数才可以访问.
cpp.showInfo(); //密码错误,修改无效
cpp.SetCost(,);
cpp.showInfo(); //密码ok
cpp.SetCost(,);
cpp.showInfo(); Book cSharp=Book("c# good",,,"bird public"); //可以通过一个对象来访问另外一个对象的private私有成员.为什么.我们进入函数,分析一下.
cSharp.SetOtherCost(,,&cpp);
cpp.showInfo();
cSharp.showInfo();
}

public protect private. 草稿。的更多相关文章

  1. public,protect,private访问权限

    第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2.其友元函数访问.不能被任何其他访问,该类的对象也不能访问. protect ...

  2. C++中public/protect/private三种访问权限控制

    一.成员访问权限控制 1.public (1)public成员变量可以被成员函数访问  [访问性] (2)public成员可以被实体对象访问  [访问性] (3)public成员可以成为子类成员  [ ...

  3. [C++]访问控制与继承(public,protect,private) 有时间再整理!!!

    http://www.cnblogs.com/chio/archive/2007/06/11/779408.html http://www.cnblogs.com/SelaSelah/archive/ ...

  4. java中public与private还有protect的区别

    java中public与private还有protect的区别 总是忘记.

  5. Java中public、private、protect对数据成员或成员函数的访问限制

    Java类中对数据成员.成员函数的访问限制修饰有:public.protect.private.friendly(包访问限制) public修饰的数据成员或成员函数是对所有用户开放的,所有用户可以直接 ...

  6. Java中访问修饰符public、private、protecte、default

    Java中访问修饰符public.private.protecte.default的意义讲解:public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属性以及方法不 仅 ...

  7. java中public,private,protected和default的区别

    类中的数据成员和成员函数据具有的访问权限包括:public.private.protect.default(包访问权限) 作用域       当前类     同一package 子孙类   其他pac ...

  8. java中public、private、protected区别

    类中的数据成员和成员函数据具有的访问权限包括:public.private.protect.friendly(包访问权限) 1.public:public表明该数据成员.成员函数是对所有用户开放的,所 ...

  9. Java 基础 - public、private、protected区别

    ref: https://www.cnblogs.com/pengfeiliu/p/3745934.html 类中的数据成员和成员函数据具有的访问权限包括:public.private.protect ...

随机推荐

  1. MySQL的下载与安装 和 navicat for mysql 安装使用

    新手上路-MySQL安装 目录结构 Windows平台 MySQL安装 示例数据导入 Linux平台 CentOS系统 Ubuntu系统 FAQ 密码生成工具-keepass 修改提示符 图形工具 删 ...

  2. jquery cdn/////////////////zzz

    jquery-2.1.1 注:jquery-2.0以上版本不再支持IE 6/7/8)百度引用地址 (推荐目前最稳定的,不会出现延时打不开情况) 百度压缩版引用地址:<script src=&qu ...

  3. GetKeyboardType获取键盘类型(通过键盘可初步判断用户使用的是台式电脑还是笔记本电脑)

    函数功能:该函数获取系统当前键盘的信息. int WINAPI GetKeyboardType( __in int nTypeFlag ); 参数说明:nTypeFlag:指定要获取的键盘信息的类型, ...

  4. Python 多线程教程:并发与并行

    转载于: https://my.oschina.net/leejun2005/blog/398826 在批评Python的讨论中,常常说起Python多线程是多么的难用.还有人对 global int ...

  5. 关于ES6的 模块功能 Module 中export import的用法和注意之处

    export default 的用法 export default命令用于指定模块的默认输出.显然,一个模块只能有一个默认输出,因此export deault命令只能使用一次.所以,import命令后 ...

  6. C# WinForm开发系列 - DataGridView

    1.DataGridView实现课程表 testcontrol.rar 2.DataGridView二维表头及单元格合并 DataGridView单元格合并和二维表头.rar myMultiColHe ...

  7. Java图形化用户界面(GUI)笔记(一)介绍

    一.布局 1.组件 以图形化的方式显示在屏幕上的,和用户进行交互的对象,就叫做组件. 组件包括:菜单.标签.文本框(密码框).滚动条.单选.复选.按钮等等. 2.容器 组件不能独立的显示出来,只能将组 ...

  8. C语言 05 数组

    数组作为函数参数,可以省略元素个数. 数组作为函数参数,传递是整个数组的地址,修改函数形参数组的值,会影响到外面的 实参数组. 基本数据类型作为函数参数,传递是数值.

  9. Python导入Scipy子模块时出错

    导入Scipy子模块时报错,出现的问题都是提示 61 from numpy._distributor_init import NUMPY_MKL  # requires numpy+mklNo mod ...

  10. Javascript中bind、call、apply函数用法

    js 里函数调用有 4 种模式:方法调用.正常函数调用.构造器函数调用.apply/call 调用. 同时,无论哪种函数调用除了你声明时定义的形参外,还会自动添加 2 个形参,分别是 this 和ar ...