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

一,class B:A爲類的繼承關係,即A類是B類的基類
class <派生類名>:<繼承方式><基類名>
{
<派生類新定義成員>
};ios

例如:spa

#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;
}

 

2、Class A::B爲類的嵌套關係,即A類是B類內部的類,雙冒號爲做用域code

以下示例爲《boost程序徹底開發指南》中3.4.6節中的橋接模式:blog

//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;
}
相關文章
相關標籤/搜索