说明:只是学习c++过程中的个人记录,同时分享给大学,万一有人用到了呢,。
1.访问控制与封装
c++使用访问说明符加强类的封装性:
public:定义在public说明符之后的成员在整个程序内可被访问,public成员定义类的接口。(一般构造函数和部分成员函数在此后面)
private:定义在private说明符之后的成员可以被类的成员函数访问,但不能被使用该类的代码访问。(一般数据成员和作为实现部分的函数在此后面)
class Sales_data { public: Sales_data() = default; Sales_data(const std::string &s) : bookNo(s) { } private: std::string bookNo; unsigned sold = 0; };
说明:
(1)一个类可以包含0个或多个说明符。
(2)对某一个访问说明符出现多少次没有严格限制。
(3)每个访问说明符有效范围直到下一个访问说明符出现或者类的结尾处。
2.class与struct区别
使用class,struct都可以定义类,二者的区别就是:
struct:在第一个访问说明符之前的成员是public的;
class:在第一个访问说明符之前的成员是private的.
3.友元
类可以允许其他类或者函数访问它的非公有成员,方法是令其他类或者函数成为它的友元。
想把一个函数作为友元,只需增加一条以friend关键字开始的函数声明即可:
class Sales_data { //为add非成员函数做友元声明 friend Sales_data add(const Sales_data&, const Sales_data&); public: Sales_data() = default; Sales_data(const std::string &s) : bookNo(s) { } private: std::string bookNo; unsigned sold = 0; };
说明:1.友元声明只能出现在类定义的内部,但是在类内出现的具体位置不限。一般来说,最好在类定义开始或结束前的位置集中声明友元。
2.友元的声明仅仅指定了访问的权限,而非一个通常意义上的函数声明。如果我们希望类的用户调用某个友元函数,则需要在友元声明之外再专门对函数进行一次声明。
3.为了使友元对类的用户可见,对于2中说的声明一般与类本身放置在同一个头文件中(类的外部)。
4.一个类可以把其他类或其他类的成员函数定义成友元。(则这个其他类的成员函数可以访问这个类包括非公有成员在内的所有成员。)
5.友元关系不存在传递性。
6.如果一个类想把一组重载函数声明成它的友元,那么它需要对这组函数中的每一个分别声明。
7.友元的声明的作用是影响访问权限,它本身并非普通意义上的声明。(下面一个例子很好的解释这个)
struct X { friend void f() { /*友元函数可以定义在函数内部*/} X() {f ();} //错误,f还没有声明 void g(); void h(); }; void X::g() { return f();) //错误,f还没有被声明。 void f(); //声明定义在X中的f函数 void X::h() //正确,现在f的声明在作用域了
(如有错误,望批评指正。谢谢。)