类的成员类指针,可以相互指向,也就实现了可以互相修改各自的值

  1. System
    头文件System.h

    #ifndef SYSTEM_H_
    #define SYSTEM_H_
    #include<iostream>
    #include"Segment.h"
    #include"Tracking.h"
    
    namespace MY
    {
        class System
        {
        public:
            System();
            Segment* mpSegment;
            Tracking* mpTracking;
            void setSegment(Segment* segment);
            void setTracking(Tracking* tracking);
            void setnum(int x);
            int getnum();
    
        private:
            int num;
        };
    }
    #endif
    

    源文件System.cpp

    #include"System.h"
    namespace MY
    {
        System::System()
        {
            mpSegment=new Segment;
            mpTracking=new Tracking;
            num=0;
        }
    
        void System::setSegment(Segment* segment)
        {
            mpSegment=segment;
        }
        void System::setTracking(Tracking* tracking)
        {
            mpTracking=tracking;
        }
        void System::setnum(int x)
        {
            num=x;
        }
        int System::getnum()
        {
            return num;
        }
    }
    
  2. Segment
    头文件Segment.h
    注意这里,要再次声明一下另外的类,不然会报错,未定义;可以多次声明

    #ifndef SEGMENT_H_
    #define SEGMENT_H_
    #include"System.h"
    #include"Segment.h"
    #include"Tracking.h"
    namespace MY
    {
        class System;  //注意这里,要再次声明一下另外的类,不然会报错,未定义;可以多次声明
        class Tracking;
        class Segment
        {
        public:
            Segment();
            Tracking* mpTracking;
            System* mpSystem;
            void setTracking(Tracking* tracking);
            void setSystem(System* system);
            void setnum(int x);
            inline int getnum(){return num;}
    
        private:
            int num;
        };
    }
    #endif
    

    源文件Segment.cpp

    #include"Segment.h"
    namespace MY
    {
        Segment::Segment():num(0)
        {}
        void Segment::setTracking(Tracking* tracking)
        {
            mpTracking=tracking;
        }
        void Segment::setSystem(System* system)
        {
            mpSystem=system;
        }
        void Segment::setnum(int x)
        {
            num=x;
        }
    }
    
  3. Tracking
    头文件Tracking.h

    #ifndef TRACKING_H_
    #define TRACKING_H_
    #include"System.h"
    namespace MY
    {
        class System;
        class Segment;
        class Tracking
        {
        public:
            Tracking();
            System* mpSystem;
            Segment* mpSegment;
    
            void setSegment(Segment* segment);
            void setSystem(System* system);
            void setnum(int x);
            inline int getnum(){return num;}
    
        private:
            int num;
        };
    }
    #endif
    

    源文件Tracking.cpp

    #include"Tracking.h"
    namespace MY
    {
        Tracking::Tracking():num(0)
        {}
        void Tracking::setSegment(Segment* segment)
        {
            mpSegment=segment;
        }
        void Tracking::setSystem(System* system)
        {
            mpSystem=system;
        }
        void Tracking::setnum(int x)
        {
            num=x;
        }
    }
    
  4. 主程序test.cpp

    #include"Tracking.h"
    #include"Segment.h"
    
    using namespace std;
    
    int main(int argc,char **argv)
    {
        MY::System SLAM;
        cout<<"默认构造函数: \n"<<"SLAM.num = "<<SLAM.getnum()<<endl;
        cout<<"SLAM.mpSegment::"<<SLAM.mpSegment->getnum()<<endl;
        cout<<"SLAM.mpTracking::"<<SLAM.mpTracking->getnum()<<endl;
        MY::Segment *segment = new MY::Segment;
        segment->setnum(6);
        MY::Tracking * tracking = new MY::Tracking;
        tracking->setnum(10);
        SLAM.setSegment(segment);
        SLAM.setTracking(tracking);
        SLAM.mpSegment->setTracking(tracking);
        SLAM.mpTracking->setSegment(segment);
        cout<<"SLAM.mpSegment->num = "<<SLAM.mpSegment->getnum()<<endl;
        cout<<"SLAM.mpTracking->num = "<<SLAM.mpTracking->getnum()<<endl;
        SLAM.setnum(99);
        SLAM.mpSegment->setSystem(&SLAM);
        cout<<"SLAM.mpSegment->mpSystem->getnum() = "<<SLAM.mpSegment->mpSystem->getnum()<<endl;
    
        return 0;
    }
    
  5. CMakeLists.txt文件

    cmake_minimum_required(VERSION 3.0)
    project (CFILES)
    
    set(CMAKE_CXX_FLAGS "-std=c++11 -O2 -g -Wall")
    set(CMAKE_BUILD_TYPE "Release")
    set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_module)
    
    set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
    set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
    
    include_directories(include)
    
    add_library(LIBS src/System.cpp
                    src/Segment.cpp
                    src/Tracking.cpp)
    
    add_executable(run src/test.cpp)
    target_link_libraries(run LIBS)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值