专业编程基础技术教程

网站首页 > 基础教程 正文

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

ccvgpt 2025-03-29 15:39:54 基础教程 11 ℃

类的嵌套

c++中我们类与类之间可能会有相同的部分,我们希望我们代码重用率高一点,不使用复制代码方式的去解决,为了解决这样的问题,我们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进行赋值。

嵌套类的使用场景

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

最近发表
标签列表