C类的两种不同嵌套方式的实现与分析

白癜风该怎么治 http://m.39.net/baidianfeng/a_4591349.html

类的嵌套

c++中我们类与类之间可能会有相同的部分,我们希望我们代码重用率高一点,不使用复制代码方式的去解决,为了解决这样的问题,我们c++就出现了类的继承和嵌套,我们通过创建新的类来重用代码,而不是从头去创建他们,这样我们就可以使用别人创建好的类。

classA的代码实现

我们设置了一个A类,在类里面设置私有数据成员n,成员函数中有构造函数,设置n值的set函数,方便在其他地方调用它设置我们的n值,因为在类外我们一般不能直接访问类内私有的成员,还有一个read函数用来显示我们的n值;

classA

{

private:

intn;

public:

A(){n=0;}

voidset(intnn){n=nn;}//设置a中n的值

intread(){returnn;}//读取n值

};

classB代码实现

在这个例子中有两种嵌套方式,一个是在私有成员中嵌套A类(a)另外一个就是在公共属性中嵌套我们A类(a1),不同的嵌套方式对A中成员访问方式也是不一样的,在公共属性嵌套的我们访问嵌入类A的成员函数只需要再来一次成员选择,例如:b.a.set(xx),这样就可以调用A中的成员函数,如果是私有嵌套则不行,我们需要通过B的长远函数调用A类的成员函数,例如:b.aset(xx),我们在aset函数中又实现a.set(xx)因为aset()函数是我们B的成员函数,它是可以访问B类的私有成员,然后我们私有成员是A类的对象a,所以对象a调用A类的成员函数是完全可以的,这样就实现了对n的设置。

classB

{

private:

Aa;//B类中嵌套一个A对象

intk;

public:

Aa1;

B(){k=0;}

voidfunB(intkk){k=kk;}//设置B中k的值

intbshow(){returnk;}//显示k的值

voidaset(inti){a.set(i);}//通过B的成员函数调用对象a中的函数设置n的值

intaread(){returna.read();}//通过B成员函数调用对象a中函数获取n的值

};

main代码的实现

我们初始化好B的对象之后,通过两种方式实现对嵌套类A的对象a和a1中的私有数据成员n进行赋值。

#includeiostream

usingnamespacestd;

intmain()

{

Bb;//初始化一个B类对象

b.funB();//设置b对象中k的值

cout"k="b.bshow()endl;

cout"当嵌套类是数据公共属性时调用"endl;

b.a1.set();//设置b对象中包含的a对象的n值

cout"a1中的n="b.a1.read()endl;//展示设置好的n的值

cout"当嵌套类是数据私有属性时调用"endl;

b.aset();//通过b的成员函数调用A类对象中a的成员函数设置n的值。

cout"a中的n="b.aread()endl;//展示设置的n的值

}

代码结果分析

我们可以看出来通过两种方式的函数调用都实现了对A类中的私有数据成员n进行赋值。

嵌套类的使用场景

我们知道嵌套时为了我们代码的重用,减少我们代码的重复率,那么什么时候回使用到前面类的嵌入呢?经常有来举例子的学校管理系统,有学生类,老师类,两个不同的类但是老师和学生都有一些相同的属性,就比如出生年月等,这时候我们可以吧出生年月单独封装一个类,然后分别在老师和学生类中嵌套进去这样就实现了代码的复用。




转载请注明:http://www.aierlanlan.com/tzrz/3675.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了