如何只在cpp中定义私有成员函数
How to define a private member function only in cpp
所以考虑我有一个 class,它有一个私有成员变量和一个我不想在 header 文件中定义的私有函数,因为我想从用户。
我该怎么做?如果没有在 header.
中声明函数,我将无法访问私有变量
所以有效的是这样的:
// header file
class Testclass {
public:
// ...
private:
const int m_i;
void func() const;
}
// cpp file
#include "TestClass.h"
Testclass::func() const {
int j = m_i; //access to a private member variable
}
// ...
但我想要这样的东西:
// header file
class Testclass{
public:
//...
private:
const int m_i;
}
// cpp file
#include "TestClass.h"
Testclass::func() const {
int j = m_i; //access to a private member variable
}
// ...
我有哪些可能性?我读了一些关于 PIMPL Idiom 的内容,但我不确定这是否是我想要的,因为它看起来有点麻烦 coding-wise.
通常通过 PIMPL(指向实现的指针)成语来实现这一点。在你的头文件中你有:
class MainClass
{
public:
void public_function();
private:
class Impl;
Impl* impl;
};
请注意,头文件不包含 Impl 的定义 class,仅包含其声明。
然后您在您的 cpp 文件中定义 class 并将来自您的 public 接口的调用转发给 impl class:
的函数
class MainClass::Impl
{
void actualfunc()
{
//do useful stuff here
}
};
void MainClass::public_function()
{
return impl->actualfunc();
}
除了您打算向 class 用户隐藏不需要的成员外,PIMPL 习语还提供了额外的好处,即如果不对 class 的界面进行任何更改,则class不需要重新编译。
您可以在 cpp 文件中包含非成员辅助函数,供 class 成员使用。但是,他们必须将私有变量作为参数传递。
// header file
class Testclass{
public:
//...
private:
const int m_i;
}
// cpp file
#include "TestClass.h"
void func(int m_i) {
int j = m_i; //private member variable supplied by caller
}
// ...
所以考虑我有一个 class,它有一个私有成员变量和一个我不想在 header 文件中定义的私有函数,因为我想从用户。
我该怎么做?如果没有在 header.
中声明函数,我将无法访问私有变量所以有效的是这样的:
// header file
class Testclass {
public:
// ...
private:
const int m_i;
void func() const;
}
// cpp file
#include "TestClass.h"
Testclass::func() const {
int j = m_i; //access to a private member variable
}
// ...
但我想要这样的东西:
// header file
class Testclass{
public:
//...
private:
const int m_i;
}
// cpp file
#include "TestClass.h"
Testclass::func() const {
int j = m_i; //access to a private member variable
}
// ...
我有哪些可能性?我读了一些关于 PIMPL Idiom 的内容,但我不确定这是否是我想要的,因为它看起来有点麻烦 coding-wise.
通常通过 PIMPL(指向实现的指针)成语来实现这一点。在你的头文件中你有:
class MainClass
{
public:
void public_function();
private:
class Impl;
Impl* impl;
};
请注意,头文件不包含 Impl 的定义 class,仅包含其声明。
然后您在您的 cpp 文件中定义 class 并将来自您的 public 接口的调用转发给 impl class:
的函数class MainClass::Impl
{
void actualfunc()
{
//do useful stuff here
}
};
void MainClass::public_function()
{
return impl->actualfunc();
}
除了您打算向 class 用户隐藏不需要的成员外,PIMPL 习语还提供了额外的好处,即如果不对 class 的界面进行任何更改,则class不需要重新编译。
您可以在 cpp 文件中包含非成员辅助函数,供 class 成员使用。但是,他们必须将私有变量作为参数传递。
// header file
class Testclass{
public:
//...
private:
const int m_i;
}
// cpp file
#include "TestClass.h"
void func(int m_i) {
int j = m_i; //private member variable supplied by caller
}
// ...