1. 程式人生 > >C++中關於class B:A與Class B::A問題

C++中關於class B:A與Class B::A問題

include tsa int() pri 示例 pre 派生類 std boost

一,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; }

C++中關於class B:A與Class B::A問題