(总结)C++中实现代码重用的手段----继承和聚合

原创 2012年03月28日 14:48:56

                                                                                          C++中实现代码重用的手段----继承和聚合

C++中实现代码重用的手段:

    1.继承:

    B继承A的条件:
    逻辑上B是A的"一种(a kind of)",且A的所有属性和功能对B都有意义,则容许继承.
      比如CSaleman(销售人员)类继承CCompanyStaff(员工)类,
         轿车可以继承交通工具的所有特征.因为轿车是一种交通工具.

    

    2.聚合.

    A聚合B的条件:

     逻辑上B是A的"一部分(a part of)",A需要使用B的功能,而A和B又不属于同一类的范畴,
      比如CCompanyStaff(员工)类聚合CEducation(学历)类,Line(线段)类聚合Point(点)类.
          轿车类内嵌发动机的对象,两者不能继承,不属于一类,只能聚合,让轿车使用发动机的功能.



一:继承:

第一:继承的概念:
    子类可以继承父类除了构造函数,析构函数之外的所有成员,但是能否使用要受继承方式的限制.


第二:继承的类别:
 
1.公有继承:
class A : public B
{
}
父类的公有成员和保护成员被继承时保持不变.
父类的私有成员被继承,但是在子类中不可见.

2.私有继承:
class A : private B
{
}
或者
class A : B
{
}
父类的公有成员和保护成员均被继承为私有的.
父类的私有成员虽被继承,但是在子类中不可见.

3.保护继承:
class A : protected B
{
}
父类的公有成员和保护成员均被继承为保护的.
父类的私有成员虽被继承,但是在子类中不可见.

  总结:
  (1).无论哪一种继承方式,父类的私有成员只能通过本类的成员函数访问,类外(包括子类中)均不可访问.
  (2).保护成员存在的必要性:设计类时考虑其可能被继承,为了使子类能够访问父类的隐藏成员而设立的.
         保护成员和私有成员对于本类来说均可以实现隐藏成员的功能,本类之外均不可访问,只是保护成员为子类使用其提供了可能.

二:C++中类的聚合:


    1.在一个类中内嵌其他类的对象作为成员.

          聚合类:内嵌其他类的对象作为成员的类.
          聚合类的"内嵌对象"("子对象").


    2.聚合类与聚合类的内嵌对象之间的关系是:
       整体与部件的关系,两者往往不属于同一类范畴.
       也是拥有和被拥有的关系.前者可以使用后者的功能.


    3."聚合"隐含两种实现方式:
        1)."包含"关系:例如线段可由两个点组成,是独立的定义,两者具有不同的生命周期
        2)."嵌套"关系:整体对象的一个属性就是部分对象,唯一属于关系,具有相同的生命周期

    

      4.聚合类的构造函数:
           一个类既是派生类又是聚合类,其对象创建时系统先调用基类的构造函数,然后调用内嵌对象的
      的构造函数,最后才是本类的构造函数.而对象消亡时,析构函数的调用顺序相反.
      

      使用构造函数初始化列表来完成其对象的创建.
           类名::类名(形参表) : 基类名(形参表),内嵌对象名(形参表){}

示例代码:

#include"stdafx.h"
#include <iostream>
using namespace std;

//Point类:点类的定义
class Point
{
private:
	int x;
	int y;
public:
	Point(int a = 0,int b = 0)
	{
		x = a;
		y = b;
	}
	void Display()
	{
		cout<<"点的坐标是:"<<x<<","<<y<<endl;
	}
};

class Cow
{
public:
	char m_Color[20];
	int m_Width;
	Cow() { }
	Cow(char Color[],int Width)
	{ 
		strcpy(m_Color,Color);
        m_Width = Width;
	}
};

//Line类的定义
class Line
{  
public:
	//类Line的成员属性a,b为类Point的对象
	Point a,b;
	Cow cw;
	
	Line() { }
	Line(char color[],int width,Point & a1,Point & b1) : cw(color,width)
	{
		a = a1;
		b = b1;
	}
	
	Line(Line & s)
	{
		a = s.a;
		b = s.b;
		cw = s.cw;
	}
	
	//显示成员属性的函数
	void Display()
	{
		a.Display();
		b.Display();
		cout<<"Color="<<cw.m_Color<<"  Width="<<cw.m_Width<<endl;
	}
};

void main(int argc, char* argv[])
{
	Point a;
	Point b(7.8,9.8);
  	a = b;

	Line s("黄色",4,a,b);
	s.Display();
	system("pause");
}

  
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++中的代码重用

第14章 c++中的代码重用 14.1 包含对象成员的

c++的代码重用

一、公有继承 不是实现代码重用的唯一途径,还有很多其他途径---包含,组合或者层次化,使用私有或保护继承,多重继承 二、类 valarray 头文件 valarray。这个类用于处理数值,...

C++关于代码重用的那些事

C++的另一个目标是促进代码重用。公有继承是实现这种目标的机制之一,但并不是唯一的机制。还可以使用这样的类成员:本身是另一个类的对象,这种方法称为包含、组合或层次化。另一种方法是使用私有继承或保护继承...

《C++代码设计与重用》读书笔记

My study notes of Designing and Coding Reusable C++.

看完《C++代码设计与重用》了~~

这本书已经买了很久了,今天花了一天的时间把它读完了,不过老实说对这本书稍稍感觉有些失望,也许是以前常常听到它的盛名,心中期望太高的缘故吧~~我看的这本书是翻译过来的,除了在某些地方感觉翻译上有些生硬,...

技术路线的核心竞争力

起了一个不好听的标题。工作一年多了,也已经开始带新人了。听到那些比我年纪大的人叫我导师,我经常忍不住翻白眼。 我想写一些见解,写一些如果我上大学的时候看到会受益的东西。首先澄清一点,千万不要听信有些...

求解一元二次方程的简单c语言程序

#include #include main() { double a, b, c, disc, x1, x2; do { printf("Input a, b, c: ");//a...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)