gpt4 book ai didi

C++ 确定外部类指针的最佳方式

转载 作者:搜寻专家 更新时间:2023-10-31 00:54:57 25 4
gpt4 key购买 nike

对于我目前正忙于开发的 c++ 应用程序,我有几个类需要通过我的整个代码访问,而无需创建新对象

所以搜索我发现可以使用的方法之一是使用外部链接说明符。

我想知道使用这个外部方法的最佳方式是什么,我写了一些示例代码

classone.h
#ifndef CLASSONE_H
#define CLASSONE_H

class ClassOne
{
public:
ClassOne();

void showClassOneInt();

private:
int m_classOneInt;
};

extern ClassOne *classOne;
---------------------------------------
classone.cpp
#include "classone.h"

#include <QDebug>

ClassOne *classOne;

ClassOne::ClassOne()
{
m_classOneInt = 1;
}

void ClassOne::showClassOneInt()
{
qDebug() << "ClassOneInt: " << m_classOneInt;
}
---------------------------------------
classtwo.h
#ifndef CLASSTWO_H
#define CLASSTWO_H

class ClassTwo
{
public:
ClassTwo();

void showClassTwoInt();

private:
int m_classTwoInt;
};

#endif // CLASSTWO_H
---------------------------------------
classtwo.cpp
#include "classtwo.h"

#include <QDebug>

ClassTwo::ClassTwo()
{
m_classTwoInt = 2;
}

void ClassTwo::showClassTwoInt()
{
qDebug() << "ClassTwoInt: " << m_classTwoInt;
}
---------------------------------------
classthree.h
#ifndef CLASSTHREE_H
#define CLASSTHREE_H

class ClassThree
{
public:
ClassThree();

void showClassThreeInt();

private:
int m_classThreeInt;
};

#endif // CLASSTHREE_H
---------------------------------------
classthree.cpp
#include "classthree.h"

#include <QDebug>

ClassThree::ClassThree()
{
m_classThreeInt = 3;
}

void ClassThree::showClassThreeInt()
{
qDebug() << "ClassThreeInit: " << m_classThreeInt;
}
---------------------------------------
classtest.cpp
#include "classtest.h"
#include "classone.h"
#include "classtwo.h"
#include "classthree.h"

//Class one pointer already in header

//Class two
extern ClassTwo *classTwo;

//Class three
extern ClassThree *classThree;

ClassTest::ClassTest()
{
//Execute class one
classOne->showClassOneInt();

//Execute class two
classTwo->showClassTwoInt();

//Execute class three
classThree->showClassThreeInt();
}
---------------------------------------
main.cpp
#include <QCoreApplication>
#include "classone.h"
#include "classtwo.h"
#include "classthree.h"
#include "classtest.h"

//Class one pointer already in header file

//Class two pointer
ClassTwo *classTwo;

//Class three pointer
ClassThree *classThree;

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

//Create object for class one
classOne = new ClassOne;

//Create object for class two
classTwo = new ClassTwo;

//Create object for class three
ClassThree three;
classThree = &three;

//Create a classTest object
ClassTest test;

return a.exec();
}

请你告诉我什么是最好的方法,谢谢你的帮助。

最佳答案

最好的方法是不要这样做,而是使用 dependency injection .

如果您选择这样做,您至少应该使用 getter/工厂函数(即 ClassOne &getClassOne())),这样您就可以:

  • 确保随机代码不能改变对象和
  • 通过在首次使用时构建来隐式处理构建顺序(有时合适,有时不合适)。

关于C++ 确定外部类指针的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43635996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com