包含类和继承类的区别

继承类

class CTestA
{
public:

public:
    void testa(void);
    int a;
};

class CTestB : public CTestA
{
public:
    
public:
    void testb(void);
    int b;
};
void CTestA::testa() 
{
    CTestB b;
    b.b = 3;
    printf("testa: a:%d b:%d\n", a, b.b);
    b.testb();
}
void CTestB::testb() 
{
    b = 3;
    printf("testb: a:%d b:%d\n", a, b);
}
int main()
{
    Sqlite::CTestA testa;
    testa.a = 2;
    testa.testa();
}

结论:对象b无法继承对象a中的成员值,继承可以理解为使用继承类的方法,而不是继承值

testa: a:2 b:3
testb: a:4541708 b:3

包含类

class CTestA
{
public:
    class CTestB
    {
    public:
        
    public:
        void testb(void);
        int b;
    };

public:
    void testa(void);
    int a;
};
void CTestA::testa() 
{
    CTestB b;
    b.b = 3;
    printf("testa: a:%d b:%d\n", a, b.b);
//    b.testb();
}
int main()
{
    Sqlite::CTestA testa;
    testa.a = 2;
    testa.testa();
}

结论:可以在对象a中定义对象b,并访问b的值

testa: a:2 b:3

错误

void CTestA::testa() 
{
    CTestB b;
    b.b = 3;
    printf("testa: a:%d b:%d\n", a, b.b);
//    b.testb();
}
void CTestA::CTestB::testb() 
{
    b = 3;
    printf("testb: a:%d b:%d\n", a, b);
}
source/xxx.cpp: 在成员函数‘void Sqlite::CTestA::CTestB::testb()’中:
source/xxx.cpp:279:34: 错误:对非静态数据成员‘Sqlite::CTestA::a’的无效使用
     printf("testb: a:%d b:%d\n", a, b);
                                  ^
In file included from source/xxx.cpp:12:0:
./include/xxx.h:174:9: 附注:在此声明
     int a;
         ^

结论:在包含类b中,不能访问对象a中的值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值