类的嵌套
c++中我们类与类之间可能会有相同的部分,我们希望我们代码重用率高一点,不使用复制代码方式的去解决,为了解决这样的问题,我们c++就出现了类的继承和嵌套,我们通过创建新的类来重用代码,而不是从头去创建他们,这样我们就可以使用别人创建好的类。
class A的代码实现
我们设置了一个A类,在类里面设置私有数据成员n,成员函数中有构造函数,设置n值的set函数,方便在其他地方调用它设置我们的n值,因为在类外我们一般不能直接访问类内私有的成员,还有一个read函数用来显示我们的n值;
class A
{
private:
int n;
public:
A() { n=0;}
void set(int nn) { n=nn; }//设置a中n的值
int read() { return n;}//读取n值
};
class B代码实现
在这个例子中有两种嵌套方式,一个是在私有成员中嵌套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的设置。
class B
{
private:
A a;//B类中嵌套一个A对象
int k;
public:
A a1;
B() {k=0; }
void funB(int kk) { k=kk; }//设置B中k的值
int bshow() { return k; }//显示k的值
void aset(int i) { a.set(i);}//通过B的成员函数调用对象a中的函数设置n的值
int aread() { return a.read();}//通过B成员函数调用对象a中函数获取n的值
};
main代码的实现
我们初始化好B的对象之后,通过两种方式实现对嵌套类A的对象a和a1中的私有数据成员n进行赋值。
#include
using namespace std;
int main()
{
B b;//初始化一个B类对象
b.funB(222);//设置b对象中k的值
cout <<"k="<<b.bshow()<<endl;
cout<<"当嵌套类是数据公共属性时调用"<<endl;
b.a1.set(111);//设置b对象中包含的a对象的n值
cout<<"a1中的n="<<b.a1.read()<<endl;//展示设置好的n的值
cout<<"当嵌套类是数据私有属性时调用"<<endl;
b.aset(333);//通过b的成员函数调用A类对象中a的成员函数设置n的值。
cout<<"a中的n="<<b.aread()<<endl;//展示设置的n的值
}</code></pre><p style="text-align: left;" data-track="12">代码结果分析我们可以看出来通过两种方式的函数调用都实现了对A类中的私有数据成员n进行赋值。
嵌套类的使用场景
我们知道嵌套时为了我们代码的重用,减少我们代码的重复率,那么什么时候回使用到前面类的嵌入呢?经常有来举例子的学校管理系统,有学生类,老师类,两个不同的类但是老师和学生都有一些相同的属性,就比如出生年月等,这时候我们可以吧出生年月单独封装一个类,然后分别在老师和学生类中嵌套进去这样就实现了代码的复用。