浅谈类的组合

4. 类的组合

4.1 定义

类中的成员数据是另一个类的对象

4.2 类组合的构造函数设计原则

不仅要负责对本类中基本类型成员数据初始化,也要对对象成员初始化。

4.3 声明形式

类名::类名(对象成员所需的形参,本类成员形参):对象1(参数),对象2(参数),.......

{  // 函数体其他语句 }

4.4 例子:类的组合,线段类。

#include<iostream>

#include<cmath>

Using namespace std;

Class Point{

Public:

Point(int xx=0, int yy=0){

x=xx;

y=yy;

}

Point(Point &p);

int getX(){return x;}

int getY(){return y;}

Private:

int x,y;

};

Point::Point(Point &p){

x=p.x;

y=p.y;

cout<<”calling the copy constructor of point”<<endl;

}

Class Line{ //Line类的定义

Public: //外部接口

Line(Point xp1,Point xp2);

Line(Line &l);

double getLen(){return len; }

Private:

Point P1,p2;

double len;

};

//组合类的构造函数

Line::Line(Point xp1,Point xp2): p1(xp1),p2(xp2){

cout<<”Calling constructor of line”<<endl;

double x = static_cast<double>(p1.getX() - p2.getX());

Double y = static_cast<double>(p1.getY() - p2.getY());

Len = sqrt(x*x+y*y);

}

//组合类的复制构造函数

Line::Line(Line &l):p1(l.p1),p2(l.p2) {

Cout<<”calling the copy constructor of Line”<<endl;

Len = l.len;

}

int main()

{

Point myp1(1,1), myp2(4,5); //建立Point类的对象

Line line(myp1,myp2); //建立Line类的对象

//myp1,myp2作为函数实参,传至调用了copy构造,在Line构造函数时,

//初始p1,p2,再次调用copy构造,所以这里总共四次。

Line line2(line); //利用复制构造函数建立一个新对象

//在复制构造中,line.p1和line.p2去复制给p1,p2.两次copy构造。

cout<<”The length of the line is:”;

cout<<line.getlen()<<endl;

cout<<”The length of the line2 is:”

cout<< line2.getLen()<<endl;

return 0;

}

4.5 前向引用声明注意事项

使用前向引用声明虽然可以解决一些问题,但它并不是万能的。需要注意的是,尽管使用了前向引用声明,但是在提供一个完整的类声明之前,不能声明该类的对象,也不能在内联成员函数中使用该类的对象。

例子:

Class B; //前向引用声明

Class A{

Public:

Void f(B,b); // 对的,当函数被调用的时候,才会给形参分配内存空间。

//只有那个时候才要知道B类占多少字节,细节成分。现在

//定义这个函数原型的时候不需要知道,所以是可以的。

};

Class Fred; //前向声明

Class Barney{

Fred x; //错误:类Fred的声明尚不完善。

};

Class Fred; //前向声明

Class Barney{

Fred  &x; //正确:经过前向引用声明,可以声明Fred类对象的引用。

};

时间: 2024-08-28 23:11:02

浅谈类的组合的相关文章

ext 浅谈类的实例

 打开ext的API,如下 找到Class这个选项 将鼠标移到config那里可以看到有以下属性:  好了,让我们开始进入主题:     首先,来讲讲如何自定义一个类,在ext中,创建一个类其实与其他语言差不多,只是表达的方式不一样而已,下面是定义一个类的方法 <!--*********************************************-->        <!--类的创建-->    Ext.define('Father', {        name: '

浅谈类与对象

1.抽象:是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程. 数据抽象:某类对象的属性或状态 行为抽象:某类对象的共同行为或功能特征(方法) 2.封装:将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体.也就是将数据和操作数据的函数代码进行有机的结合,形成类. 3.继承 4.多态 1.带默认形参值的成员函数 类成员函数的默认值,一定要写在类定义中,而不能写在类定义之外的函数中. Class clock{ Public: Void setTime(int newH=0

C++之浅谈类与对象&lt;一&gt;

类与对象是C++语言的一个特点,类是对象的抽象,对象是类的实例. 类是抽象的需要占用内存,而对象时实例化的占用内存. 下面举个例子: class Time  //定义类 { int hour;   //定义数据成员 int min;    //定义数据成员 int sec;    //定义数据成员 }; Time t; 看着这个结构是不是有点眼熟呢,跟C语言中学过的struct的应用很类似,但是两者之间还是有区别的:在struct中若没有特别声明,结构体的成员都是public公有成员:而clas

浅谈类的几个基础构造函数

通过例子来介绍下C++类的几个基础构造函数. 我们以一个C类型的字符串为例: class myString { public: myString(const char* rhs = 0); // 默认(含参)构造函数 myString(const myString& rhs); // 拷贝构造函数 myString(myString&& rhs) noexcept; // 移动构造函数 myString& operator=(const myString& rhs)

浅谈Kotlin(三):类

浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 前言: 已经学习了前两篇文章,对Kotlin有了一个基本的认识,往后的文章开始深入介绍Kotlin的实战使用. 本篇介绍Kotlin中类的使用. 一.表现形式 首先看一段Java中定义类的形式,定义三个属性,每一个属性对应一个get.set方法,有一个toString()方法 /* * @author xqx * @emil [email protected] * create

浅谈对Java中ThreadLocal类的理解

首先要明确:ThreadLocal不是一个多线程类,或者应该叫做线程局部变量.这从ThreadLocal的JDK定义中就可以看到 public class ThreadLocal<T>extends Object 可以看出ThreadLocal只是一个普普通通的类,并没有继承自Thread或实现Runnable接口. 同时也可以看到ThreadLocal使用了泛型,这样他就可以操作几乎任何类型的数据了.下面说JDK API代码时具体再说. 对此类,看看JDK API中的部分描述: 该类提供了线

【内存类操作】浅谈内存拷贝异常

结合本人在实际项目中所积累的经验,以及曾经犯过的错误,堆内存操作类函数做一个简单的剖析,抛砖引玉,欢迎大家吐槽. 首先,讲一下内存使用异常发生的几种场景. 1.野指针的使用,使用已经释放的指针,如果向野指针中写内容,就极有可能导致设备重启或任务挂死.因为,正在运行的任务的地址被意外的改写. [避免策略]函数入参要判空,指针使用(包括释放)之前一定要释放. 2.内存函数的错误使用: void *memset(void *s, int ch, size_t n); c语言中在<memory.h>或

浅谈java类集框架和数据结构(2)

继续上一篇浅谈java类集框架和数据结构(1)的内容 上一篇博文简介了java类集框架几大常见集合框架,这一篇博文主要分析一些接口特性以及性能优化. 一:List接口 List是最常见的数据结构了,主要有最重要的三种实现:ArrayList,Vector,LinkedList,三种List均来自AbstracList的实现,而AbstracList直接实现了List接口,并拓展自AbstractCollection. 在三种实现中,ArrayList和Vector使用了数组实现,可以认为这两个是

浅谈元类(个人理解)

浅谈元类(个人理解) 我们知道在python中一切皆对象(object),那么所以有的对象都成了object的子类,那么object类又是由谁创建的呢? 实际上,能够创建类的类,叫元类.还有一个概念就是:元类创建了object类,同时又是object类的子类(这是什么鬼?我们就不去考虑这个逻辑了,已经完美解决了先有鸡还是先有蛋的问题了). 元类实际还是所有类的创建者,即使所有类(包括元类自己)都是object的子类,他们的关系如下: Interesting...... 原文地址:https://