C++入门笔记(三)数据的共享与保护

1、对象的生存期


      静态生存期:这种生存期与程序的运行期相同,在文件作用域中声明的对象具有这种生存期,在函数内部声明静态

生存期对象,要冠以关键字 static。

      动态生存期:块作用域中声明的对象时动态生存期的对象(习惯称局部生存期对象),开始于程序执行到声明点时,

结束于命名该标识符的作用域结束处。


2、静态成员


     静态数据成员:用关键字 static 声明,该类的所有对象维护该成员的同一个拷贝,必须在类外定义和初始化,

用(::)来指明所属的类。


      静态成员函数:类外代码可以使用类名和作用域操作符来调用静态成员函数,静态成员函数只能引用属于该类

的静态数据成员或静态成员函数。

      实例:

class A
{
public:
    static void f(A a);
private:
    int x;
};
void A::f(A a)
{
    cout << x; //对 x 的引用是错误的
    cout << a.x; //正确
}

3、类的友元


      友元是 C++ 提供的一种破坏数据封装和数据隐藏的机制。通过将一个模块声明为另一个模块的友元,一个模块能够引用

到另一个模块中本是被隐藏的信息。可以使用友元函数和友元类。

      为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元。


      友元函数:是在类声明中由关键字 friend 修饰说明的非成员函数,在它的函数体中能够通过对象名访问 private 和 protected成员

访问对象中的成员必须通过对象名。


      友元类:若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员。

声明语法:将友元类名在另一个类中使用 friend 修饰说明。

       实例:

class A
{
public:
    void display() {cout << x << endl;}
    int getX() {return x;}
    friend class B; //B 类是 A 类的友元类
private:
    int x;
};
class B
{
public:
    void set(int i);
    void display();
private:
    A a;
};
void B::set(int i)
{
    a.x = i; //由于 B 是 A 的友元,
    //所以在B的成员函数中可以访问 A 类对象的私有成员
}

4、常类型

     常类型的对象必须进行初始化,而且不能被更新。

     常引用: const 类型说明符 &引用名

     常对象: 类名 const 对象名

     常数组:类型说明符 const 数组名[大小]...

     常成员函数: 类型说明符 函数名(参数表) const;

                            const 关键字可以被用于参与对重载函数的区分

     通过常对象只能调用它的常成员函数。

 

猜你喜欢

转载自blog.csdn.net/u012561696/article/details/19079639