zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    POJ 3468 区间更新,区间求和(经典)
    HDU 1698 区间更新
    POJ 2828 单点更新(好题)
    HDU 2795 单点更新,区间优先查找(想法)
    HDU 1394 树状数组求逆序对
    HDU 1754 单点更新,求区间最大值
    Servlet 3.0 对异步处理的支持
    Servet3.0于Servlet2.5比较
    你的灯还亮着吗读书笔记3
    你的灯还亮着吗读书笔记2
  • 原文地址:https://www.cnblogs.com/inrgihc/p/8203395.html
Copyright © 2011-2022 走看看