继承类
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中的值