C++中关于class B:A与Class B::A问题
一,class B:A为类的继承关系,即A类是B类的基类
class <派生类名>:<继承方式><基类名>
{
<派生类新定义成员>
};
例如:
#include<iostream> class A { public: void print() { std::cout<<"A::print()"<<std::endl; } }; class B:A //这里等价于class B:private A 即B继承A的方式为私有继承 { public: void test() { print(); std::cout<<"B::test()"<<std::endl; } }; int main() { B b; b.test(); return 0; }
二、Class A::B为类的嵌套关系,即A类是B类内部的类,双冒号为作用域
如下示例为《boost程序完全开发指南》中3.4.6节中的桥接模式:
//File:TestSample.h #include<boost/smart_ptr.hpp> class TestSample { private: class TestSampleImpl; boost::shared_ptr<TestSampleImpl> m_ptrImpl; public: TestSample(); ~TestSample(); void Display(); }; ////////////////////////////////////////// //File:TestSample.cpp #include "TestSample.h" #include "TestSampleImpl.h" #include<boost/make_shared.hpp> TestSample::TestSample() { m_ptrImpl=boost::make_shared<TestSampleImpl>(); } TestSample::~TestSample() { } void TestSample::Display() { m_ptrImpl->Display(); } /////////////////////////////////////////// //File:TestSampleImpl.h #include "TestSample.h" class TestSample::TestSampleImpl { public: TestSampleImpl(){} ~TestSampleImpl(){} void Display(); }; //////////////////////////////////////// //File:TestSampleImpl.cpp #include "TestSampleImpl.h" #include<iostream> void TestSample::TestSampleImpl::Display() { std::cout<<"TestSampleImpl::Display()"<<std::endl; } //////////////////////////////////////// //File:main.cpp #include"TestSample.h" int main(int argc,char *argv[]) { TestSample inst; inst.Display(); return 0; }