zoukankan      html  css  js  c++  java
  • 【笔记】C++自学笔记系列02:类的组合与类的友元

    类的组合:对象充当成员

    在创建对象时,也要对内嵌对象初始化

    组合类构造函数定义

    类名::类名(形参):内嵌对象1(形参),内嵌对象2(形参)

    {   }

    Circle:: Circle(float r)

    {radius=r;}

    等价于Circle:: Circle(float r):radius(r) {}//效率更高

    此时构造函数调用顺序:1、调用内嵌对象的构造函数,按定义中出现的次序2、自己的

    组合类的拷贝构造函数,要为内嵌对象的拷贝构造函数传递参数,若C类中包含B类的对象b,则C类的拷贝构造函数形式为

    C::C(C &c1):b(c1.b)   {…}

    全局变量和加static声明的,都具有静态生存期

    类的静态成员:所有对象共享

    1、              静态数据成员:不是某个对象的成员,而是为整个类所有,只存储在一个地方

    只能通过类名访问“类型  类名::标识符”

    //静态数据成员的定义和初始化,在类外使用类名限定

    2、              静态函数成员

    作用:专门访问静态数据成员,访问其它数据成员必须通过参数传递得一对象,再通过该对象访问其它数据成员

    3、              一般的函数成员只能通过对象调用,但静态函数成员可以用对象或者类名来调用,从而可以在没有定义对象之前便可以调用函数

    若通过一般的函数成员访问静态数据成员,最好在类外实现

    类的友元:声明哪些类或函数是它的朋友,从而给它们提供对本类的访问特许

    1、              友元函数:可以是一个普通函数,也可以是其它类的成员函数,

    从而可以在友元函数中通过对象访问其它类的数据。

    2、              友元类

    Class B

    { friend class A;//声明A为B的友元类}

    A的所有成员函数都是B的友元函数,都可以访问B的数据,这时最好将B的对象作为A的数据成员(类的组合),以便通过该对象访问B的数据。

  • 相关阅读:
    双向链表

    一个简单makefile
    内存管理
    队列
    postgresql表结构查询sql
    postgresql 命令
    NSMutableDictionary 中使用setValueForKey 和 setObjectForKey有什么区别?
    ViewController 生命周期
    程序启动过程
  • 原文地址:https://www.cnblogs.com/elesos/p/2793175.html
Copyright © 2011-2022 走看看