`

《C++学习笔记》子对象的初始化

    博客分类:
  • C++
阅读更多
===============================================
未完待续,转载时请表明出处:http://www.cofftech.com/thread-1398-1-1.html
欢迎大家跟帖讨论哈~~~~~
===============================================

以前提到,当一个类的对象用作另一个类的数据成员时,称为对象成员或子对象(sub-object)。包含子对象的 类被称为复合类(composite class)。这种功能称为复合(composition)。
例如:
class A
{
……
};
class B
{
    A  a;
    ……
};
其中class B中的成员a(即class A的对象)是子对象。子对象也需要初始化,而这也要依靠初始化列表。

[例1]初始化列表将子对象初始化
#include <iostream.h>

class sub_class
{
      int a;
      double d;
public:
      sub_class (int j, double m)
       {     a = j;      d = m;    }
      void sub_show( )
      {      cout<<"sub-object data: "<<a<<" and "<<d<<endl;  }
};

class comp_class
{
      int x;
      sub_class  sub_obj;
public:
      comp_class (int a, int b, double d) : x(a), sub_obj(b, d) { }
      void show( ) {      sub_obj.sub_show( );
                            cout<<"comp-object datum: "<<x<<endl;    }
};

void main()
{
      comp_class objp(123, 456, 98.76);
      objp.show( );
}
/* Result:
sub-object data: 456 and 98.76
comp-object datum: 123
*/
[例2]初始化列表将多个子对象初始化
// initab_5.cpp
// initialization of two sub-objects
#include <iostream.h>
class sub_class {
       int x;
public:
       sub_class (int a)   { x = a; }             //defining the constructor
       void display( )     { cout<<x<<endl; }
};

class comp_class {
       int y;
       sub_class sub_obj_1;  // a data member
       sub_class sub_obj_2;  // another data member
public:
       comp_class (int a, int b, int c); //declaring the constructor
       void display_comp( ) { cout<<"comp_class::y : "<<y<<endl; }
       void display_sub_1( )       { cout<<"sub_obj_1.x : "; sub_obj_1.display( ); }
       void display_sub_2( )       { cout<<"sub_obj_2.x : "; sub_obj_2.display( ); }
};

comp_class::comp_class (int a, int b, int c):sub_obj_1(b), sub_obj_2(c)          
// constructor with initialization table
{
       y = a;
}

void main()
{
       comp_class obj(10, 20, 30);
       obj.display_comp();
       obj.display_sub_1();
       obj.display_sub_2();
}

/* Results:
comp_class::y : 10
sub_obj_1::x : 20
sub_obj_2::x : 30
*/
注意:初始化列表中只能使用子对象名sub_obj_1和sub_obj_2而不能用类名,因一个类可能产生多个子对象。
0
1
分享到:
评论

相关推荐

    visual C++程序设计学习笔记随书源码(全2-12章)

    《Visual C++程序设计学习笔记随书源码》是一份宝贵的学习资源,涵盖了从第二章到第十二章的完整内容,由刘春辉和徐健飞两位专家编著,出版于电子工业出版社。这个压缩包包含了一系列与Visual C++编程相关的源代码,...

    学习笔记 c++ 面试

    - 构造函数是类的一个特殊成员函数,用于初始化新创建的对象。在题目中提到了Copy构造函数,它在对象以值传递或返回时被调用,用于创建对象的副本。浅拷贝(shallow copy)仅复制对象的直接成员,而不复制动态分配...

    C++&C学习笔记

    - **构造函数**:用于初始化对象的状态。 - **析构函数**:在对象生命周期结束时被调用,用于释放资源。 #### 名字空间 - **定义**:用于组织代码,避免命名冲突。 - **作用域**:可以定义局部或全局的名字空间。 ...

    《Inside the C++ Object Model》笔记(1~7章)

    1. **单继承的内存模型**:每个派生类对象都会有一个额外的指针,指向其基类子对象。这种方式简单但可能导致派生类对象的大小受基类影响。 2. **多继承的基类表模型**:为了解决多继承带来的问题,每个类对象都指向...

    C++日常笔记

    - 全局/静态存储区:全局变量和静态变量存储在这里,无论是否初始化。 - 自由存储区:通过`malloc`和`free`分配和释放的内存,有时也称为堆区。 - 栈区:存放函数参数和局部变量,自动分配和释放,按后进先出(LIFO...

    《设计模式》学习笔记

    ### 设计模式学习笔记 #### 引言 设计模式(Design Patterns)是在软件设计领域内广泛应用的一种实践指南,它提供了一系列解决常见问题的方案。设计模式可以被理解为面向对象软件设计的经验总结,是对特定面向对象...

    C++基础笔记,容易学习

    为了实现一个启动时不自动创建子窗口的多重文档界面(Multiple Document Interface,简称MDI)程序,可以通过修改`CWinApp`派生类的初始化函数来达到目的。具体步骤如下: 1. **在App类的初始化函数中**,通常是在`...

    C++ GUI Qt4 编程 学习笔记

    **C++ GUI Qt4 编程 学习笔记** 在深入探讨C++使用Qt4进行图形用户界面(GUI)编程之前,我们先了解Qt库的基本概念。Qt是一个跨平台的应用程序开发框架,由挪威Qt公司(原属于诺基亚)开发,支持Windows、Linux、...

    c++教案 谭浩强 学习c++的学生

    构造函数用于初始化新创建的对象,而析构函数在对象生命周期结束时被调用,用于清理资源。这些函数的名字与类名相同,但构造函数无返回类型,析构函数为void类型。 5. **指针与引用** 指针是C++中强大的工具,它...

    JAVA学习笔记

    通过讲解this关键字、继承、static关键字和代码块、final关键字、多态、方法重写、抽象类与接口、封装与隐藏、垃圾回收、类组合、包装类、对象处理、类成员、final修饰符详解等知识点,本文档为Java学习者提供了一套...

    java学习笔记.pdf

    - **构造方法**:用于初始化新创建的对象。 - **类方法和实例方法**:类方法可以直接通过类名调用,而实例方法则需要通过对象调用。 - **4.3 对象** - **创建对象**:使用new关键字创建对象。 - **使用对象**:...

    王健伟老师_Linux C++网络编程_工程思维导图.pdf

    在对王健伟老师的Linux C++网络编程课程进行辅助学习时,工程思维导图作为一种图形化思维工具,可以帮助学生更系统地理解和掌握复杂的知识点。这份资料中提到的内容涉及到网络编程的多个关键概念和实现细节,下面将...

    c++ 电子教案,ppt版

    从C++11开始,C++引入了许多新特性,如右值引用、lambda表达式、自动类型推断(auto关键字)、统一的初始化方式、移动语义等,这些都极大地提升了C++的现代性和易用性。 **总结** 本C++电子教案的PPT形式将深入...

    Arduino学习笔记② Arduino语言基础.pdf

    其中,setup() 函数在程序开始运行时执行一次,用于初始化设置;loop() 函数则包含了主要的程序逻辑,并且会不断地循环执行。 在数据类型方面,Arduino定义了常量和变量。常量是在程序运行过程中其值不可更改的数据...

    cocos2dx学习笔记

    这篇学习笔记将引导你了解如何配置Cocos2d-x的开发环境以及基础的使用方法。 ### 一、COCOS2D-X 下载与安装 1.1 **开发环境的安装与环境变量的设置** - **JDK的安装与路径设置**:首先,你需要安装Java ...

    编程笔记概要

    ### 一、C++ 中变量初始化的重要性 在 C++ 编程语言中,初始化变量是非常重要的一个步骤。这是因为未初始化的变量可能会导致不可预测的行为,比如程序崩溃或者产生错误的结果。例如,在代码片段中提到:“1C++У鲢...

    C++(有.text,.ppt等格式)

    此外,高级主题如STL(标准模板库)、异常处理、智能指针和RAII(资源获取即初始化)技术也是现代C++编程中不可或缺的部分。 其次,.ppt文件通常用于教学演示,可能包含有关C++语言的幻灯片,涵盖了从基础到高级的...

    《Visual C++从入门到精通(第二版)》的要点笔记

    ### Visual C++从入门到精通(第二版)的要点笔记 #### 文档类(CWinGreetDoc) 文档类在Microsoft Foundation Classes (MFC)框架中扮演着关键角色,主要负责存储程序的数据以及数据的读取和写入操作。此类在MFC...

Global site tag (gtag.js) - Google Analytics