我有很多C#代码,我必须用C ++编写。我在C ++方面没有太多经验。
我正在使用 Visual Studio 2012 进行构建。该项目是 C ++中的静态库(不在C ++ / CLI中)。
我有一个包含一些静态实例的类,我希望其他类使用。我不希望任何人能够自己更改实例,但我希望其他类能够不明显地使用不同的实例。
在C ++中实现此目的的正确方法是什么?我可以使用参考文献(&)吗?我必须使用指针吗?如果我使用指针,我是否必须用" new"?分配我的课程?或者我可以使用自动分配吗?
如果我想要的不清楚,这段代码理论上会有我想要的东西,但它没有构建:
C ++ MyClas.h //这是我的静态实例类
class MyClass
{
private:
std::string name;
public:
MyClass(void);
MyClass(string name);
MyClass(const MyClass&);
~MyClass(void);
std::string GetName(){return name;}
static const MyClass& Instance1();
static const MyClass& Instance2();
};
C ++ MyClas.cpp
MyClas::MyClas(void)
{
}
MyClas::MyClas(string name)
{
this->name = name;
}
MyClas::MyClas(const Unit& unit)
{
name = unit.name;
}
MyClas::~MyClas(void)
{
}
const MyClas instance1= MyClas("Instance1");
const MyClas& MyClas::Instance1()
{
return instance1;
}
const MyClas instance2= MyClas("Instance2");
const MyClas& MyClas::Instance2()
{
return instance2;
}
我想如何使用它(虽然这不会构建)
c ++ MyOtherClass.h //此类使用MyClass实例
class MyOtherClass
{
protected:
const MyClass& myInstance;
public:
MyOtherClass(void);
~MyOtherClass(void);
void Swap(const MyClass& myInstance);
};
c ++ MyOtherClass.cpp
MyOtherClass::MyOtherClass(void): myInstance(MyClass::Instance1())
{
}
MyOtherClass::~MyOtherClass(void)
{
}
void MyOtherClass::Swap(const MyClass& instance)
{
myInstance = instance; //Here it fails because I want to modify a const.
//I want to change my code so I only have 1 instance
//Instance1 and 1 Instance2 of MyClass, buy MyOtherClass
//can reference either without modifying them.
}
答案 0 :(得分:4)
我必须使用指针吗?
是
我不希望任何人能够自己更改实例
所以你想要一个指向const
的指针,以防止修改指针的目标对象。
我必须用“新”分配我的课程吗?
不,指针可以指向任何合适类型的对象。
或者我可以使用自动分配吗?
当然:
thing t1, t2;
thing const * p = &t1; // points to t1
p = &t2; // points to t2
答案 1 :(得分:2)
是的,你必须使用指针。不,您不需要动态分配,甚至不需要自动分配。使用静态分配的当前对象也具有地址,您可以使用&
address-of运算符。
const MyClass* myInstance;
MyOtherClass::MyOtherClass(void): myInstance(&MyClass::Instance1())
void MyOtherClass::Swap(const MyClass& instance)
{
myInstance = &instance;
}