工程中心网站建设汇报,建设银行征信中心官方网站,丰顺网站建设,十大wordpress收费主题访问控制与封装 文章目录访问说明符#xff1a;友元#xff1a;封装好处#xff1a;class Sales_data{public://作为接口的一部分#xff0c;构造函数和部分成员函数isbn#xff0c;combine紧跟在public说明符之后。Sales_data() default;Sales_data(const std::string 友元封装好处class Sales_data{public://作为接口的一部分构造函数和部分成员函数isbncombine紧跟在public说明符之后。Sales_data() default;Sales_data(const std::string s, unsigned n, double p):bookNo(s), units_sold(n), revenue(p*n) {}Sales_data(const std::string s): bookNo(s) {}Sales_data(std::istream);std::string isbn() const {return bookNo;}Sales_data combine(const Sales_data);private://数据成员和作为实现部分的函数跟在private说明符之后。double avg_price() const {return units_sold ? revenue/units_sold : 0;}std::string bookNo;unsigned units_sold 0;double revenue 0.0;
};访问说明符
public说明符定义在public后的成员在整个程序内可被访问public成员定义类的接口。private说明符定义在private后的成员可以被类的成员函数访问但是不能被使用该类的代码访问private成员定义类的接口。
class关键字和struct关键字
这两个关键字都可以用来定义类。区别struct和class的默认访问权限不同。 使用struct关键字定义在第一个访问说明符之前的成员是public的。使用class关键字定义在第一个访问说明符之前的成员是private的。一般希望定义类的所有成员是public的用struct全是private的用class。
友元
class Sales_data {//为sales_data的非成员函数所做的友元声明。
friend Sales_data add(const Sales_data, const Sales_data);
friend std::ostream print(std::ostream, const Sales_data);
friend std::istream read(std::istream, Sales_data);
public:// constructorsSales_data() default;Sales_data(const std::string s): bookNo(s) { }Sales_data(const std::string s, unsigned n, double p):bookNo(s), units_sold(n), revenue(p*n) { }Sales_data(std::istream );// operations on Sales_data objectsstd::string isbn() const { return bookNo; }Sales_data combine(const Sales_data);double avg_price() const;
private:std::string bookNo;unsigned units_sold 0;double revenue 0.0;
};// nonmember Sales_data interface functions
//友元声明仅仅指定了访问权限如果我们希望用户能调用友元函数还需要在友元声明之外再专门对函数进行一次声明。
Sales_data add(const Sales_data, const Sales_data);
std::ostream print(std::ostream, const Sales_data);
std::istream read(std::istream, Sales_data);
类还可能有非成员函数函数在概念上属于类但是不定义在类中则它一般应与类声明在同一个头文件内。这里的addprintread函数就是非成员函数。
既然Sales_data数据成员是private的那我们addprintread函数就无法正常编译了。
类可以允许其他类或者函数访问它的非公有成员方法就是令其他类或者函数称为它的友元。只需增加一条以friend关键字开始的函数声明语句。
friend Sales_data add(const Sales_data, const Sales_data);
friend std::ostream print(std::ostream, const Sales_data);
friend std::istream read(std::istream, Sales_data);友元声明只能出现在类的内部但是具体位置不限。
封装好处
被封装的类的具体实现细节可以随意改变无需调整用户级别的代码。确保用户代码不会无意间破坏封装对象的状态。