C++类的组合

:都说书写是为了更好地思考,最近在学习c++编程设计,之前在博客园上看到的各位大神们的随笔,心中充满各种羡慕嫉妒,怎么都写得这么好。为此在摸索良久后,终于在今天开启了自己的随笔之路。
正文:c++类的组合,描述的是一个类内嵌入其他类的对象作为成员的情况,它们之间的关系式包含与被包含的关系。当创建类的时候,如果这个类具有内嵌对象成员,那么各个内嵌对象也将被自动创建。  在声明一个组合类的对象时,不仅它自身的构造函数将被调用,而且还将调用其内嵌对象的构造函数。构造函数的调用顺序为:

①按照内嵌对象在组合类的声明出现的次序,依次调用其内嵌对象的构造函数。

②执行本类构造函数的函数体。

实例:求两点间的距离(开发环境:VS2010 控制台应用程序)

 1 #include "stdafx.h"
 2 #include<iostream>
 3 #include<math.h>
 4 using namespace std;
 5 class Point //定义Point类
 6 {
 7 public:
 8     Point(float x,float y);//构造函数
 9     Point(Point& point);//拷贝构造函数
10     float GetX(){return X;}
11     float GetY(){return Y;}
12 private:
13     float X,Y;
14
15 };
16 Point::Point(float x,float y):X(x),Y(y)
17 {
18  cout<<"Point类构造函数被调用"<<endl;
19 }
20
21 Point::Point(Point& point)
22 {
23     X=point.X;
24     Y=point.Y;
25     cout<<"Point类拷贝构造函数被调用:"<<endl;
26 }
27
28 class Distance
29 {
30 public:
31     Distance(Point p1,Point p2);//构造函数
32     double Get_Dis(){return dist;}
33 private:
34     Point P1,P2;
35     double dist;
36
37 };
38 Distance::Distance(Point p1,Point p2):P1(p1),P2(p2)
39 {
40    cout<<"Distance类构造函数被调用"<<endl;
41    double x=double(P1.GetX()-P2.GetX());
42    double y=double(P1.GetY()-P2.GetY());
43    dist=sqrt(x*x+y*y);
44 }
45
46 int _tmain(int argc, _TCHAR* argv[])
47 {
48     float x1,y1,x2,y2;
49     cout<<"请输入第一个点坐标值(x,y):"<<endl;
50     cin>>x1>>y1;
51     cout<<"请输入第二个点坐标值(x,y):"<<endl;
52     cin>>x2>>y2;
53     Point p1(x1,y1),p2(x2,y2);
54     Distance dis(p1,p2);
55     cout<<"此两点距离为:"<<dis.Get_Dis()<<endl;
56     system("pause");
57     return 0;
58 }

程序运行结果为:

分析:主程序在执行时,首先生成两个Point类对象,然后构造Distance类对象,在执行第54行代码时(即声明Distance类对象),Point类的拷贝构造函数被调用了4次,它们分别是两个Point对象在Distance类对象构造函数进行函数参数形参与实参结合时和初始化内嵌对象时调用的。

时间: 2024-10-08 21:08:41

C++类的组合的相关文章

类的组合

1.类的组合:类中的成员数据是另一个类的对象.类组合的构造函数:原则:不仅要负责对本类中的基本类型成员数据赋初值,也要对对象成员初始化. 2.构造函数的调用顺序: 1.调用内嵌对象的构造函数(按内嵌时的声明顺序,先声明者先构造): 2.调用本类的构造函数 3.析构函数的调用顺序: 1.调用本类的析构函数: 2.调用内嵌对象的析构函数(按内嵌时的声明顺序,先声明者先析构). 4.若调用默认构造函数(即无形参的),则内嵌对象的初始化也将调用相应的默认构造函数. 5.类声明的方式有两种:使用前向引用声

【C++基础】类的组合

所谓类的组合是指:类中的成员数据是还有一个类的对象或者是还有一个类的指针或引用.通过类的组合能够在已有的抽象的基础上实现更复杂的抽象. 比如: 1.按值组合 #include<iostream.h> #include<math.h> class Point { public: Point(int xx,int yy)//构造函数 { x=xx; y=yy; cout<<"Point's constructor was called"<<e

Python学习之旅—面向对象进阶知识:类的命名空间,类的组合与继承

前言 上篇博客笔者带领大家初步梳理了Python面向对象的基础知识,本篇博客将专注于解决三个知识点:类的命名空间,类的组合以及面向对象的三大特性之一继承,一起跟随笔者老看看今天的内容吧. 1.类的命名空间 在上一篇博客中,我们提到过对象可以动态添加属性,一起来回忆下昨天的知识点,看如下的代码: class A: pass a = A() a.name = 'alex' print(a.name) 这里我们手动为a对象添加了一个属性name,然后直接打印可以得到a对象的名称.通过这个例子,我们可以

day31 类的组合及继承,文件目录规范

Python之路,Day18 = Python基础18-面向对象继承与组合 类的继承 1 def talk(): 2 print("I am come from talk..a") 3 4 class Animal: 5 def say(self): 6 print("say") 7 8 class Person(object): 9 def __init__(self, name, age): 10 self.name = name 11 self.age = a

Day18:类的抽象、类的组合应用

一.抽象类 1.什么是抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化. 2.为什么要有抽象类 如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性. 比如我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃水果时,要么是吃一个具体的香蕉,要么是吃一个具体的桃子......你永远无法吃到一个叫做水果的东西. 从设计角度去看,如果类是从现实对象抽象而来的,那么抽象类就是基于类抽

初学C++-----------------类的组合

类的组合: 新类中的数据成员是另一个类的对象,可称这种成员是新建类的子对象或对象成员. 可以在已有的抽象的基础上实现更复杂的抽象. 新类的定义格式可表述为: class X { 类名1  成员1: 类名2  成员2: ........ 类名N  成员N: .......... }; 对象成员的初始化: 在构造类X的对象过程中: 系统首先调用其子对象的构造函数,初始化子对象:然后才执行类X自己的构造函数的函数体以完成初始化本类中的非对象成员. 对于同一类中的不同的子对象,系统按照它们在类中的说明顺

计算机程序的思维逻辑 (14) - 类的组合【转】

正所谓,道生一,一生二,二生三,三生万物,如果将二进制表示和运算看做一,将基本数据类型看做二,基本数据类型形成的类看做三,那么,类的组合以及下节介绍的继承则使得三生万物. 上节我们通过类Point介绍了类的一些基本概念和语法,类Point中只有基本数据类型,但类中的成员变量的类型也可以是别的类,通过类的组合可以表达更为复杂的概念. 程序是用来解决现实问题的,将现实中的概念映射为程序中的概念,是初学编程过程中的一步跨越.本节通过一些例子来演示,如何将一些现实概念和问题,通过类以及类的组合来表示和处

计算机程序的思维逻辑 (14) - 类的组合

正所谓,道生一,一生二,二生三,三生万物,如果将二进制表示和运算看做一,将基本数据类型看做二,基本数据类型形成的类看做三,那么,类的组合以及下节介绍的继承则使得三生万物. 上节我们通过类Point介绍了类的一些基本概念和语法,类Point中只有基本数据类型,但类中的成员变量的类型也可以是别的类,通过类的组合可以表达更为复杂的概念. 程序是用来解决现实问题的,将现实中的概念映射为程序中的概念,是初学编程过程中的一步跨越.本节通过一些例子来演示,如何将一些现实概念和问题,通过类以及类的组合来表示和处

类的组合使用

4.类的组合使用: 类的组合使用,就是类里边的实例变量是自己定义的类.用法与普通类使用一样. 例子: family.h #import <Foundation/Foundation.h> #import "Father.h" #import "Mother.h" #import "Son.h" @interface Family : NSObject{ //father Father *_father; //mother Mother

Day30:类的抽象、类的组合应用

一.抽象类 1.什么是抽象类 抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化. 2.为什么要有抽象类 如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性. 比如我们有香蕉的类,有苹果的类,有桃子的类,从这些类抽取相同的内容就是水果这个抽象的类,你吃水果时,要么是吃一个具体的香蕉,要么是吃一个具体的桃子......你永远无法吃到一个叫做水果的东西. 从设计角度去看,如果类是从现实对象抽象而来的,那么抽象类就是基于类抽