C :如何声明私人成员对象
C++: How to declare private member objects
可能的重复:
您如何为成员使用非默认构造函数?
我有当前代码:
class ImagePoint {
private:
int row;
int col;
public:
ImagePoint(int row, int col){
this->row = row;
this->col = col;
}
int get_row(){
return this->row;
}
int get_col(){
return this->col;
}
};
我想这样做:
class TrainingDataPoint{
private:
ImagePoint point;
public:
TrainingDataPoint(ImagePoint image_point){
this->point = image_point;
}
};
但是,这不会编译,因为该行ImagePoint point;
要求ImagePoint
类具有一个空构造函数。替代方案(根据我的阅读)说我应该使用指针:
class TrainingDataPoint{
private:
ImagePoint * point;
public:
TrainingDataPoint(ImagePoint image_point){
this->point = &image_point;
}
};
但是,一旦构造函数完成运行,该指针会指向清除的对象吗?如果是这样,我必须制作image_point
的副本吗?这需要复制构造函数吗?
您需要使用构造函数初始器列表:
TrainingDataPoint(const ImagePoint& image_point) : point(image_point){
}
您应该在可能的情况下更喜欢。但是,在某些情况下,您必须使用它:
- 没有默认构造函数的成员(如您所提到的)
- 会员参考
-
const
成员
您不需要知道这些事情,因为您不会使用该代码,而只是为了完整性:
构造函数完成运行后,该指针将指向一个 清除对象?
是的,当构造函数退出时,参数image_point
被破坏。因此,您是对的,将指针存储在对象中并在此之后尝试使用它是不正确的。
如果是这样,我是否必须制作image_point的副本?
那会做到的,但是您不使用此代码的原因是的问题 您将其复制到。
这需要复制构造函数吗?
是的,但是ImagePoint
已经有一个复制构造函数,编译器为您自动生成。
只需使用构造函数初始器列表:
class TrainingDataPoint
{
private:
ImagePoint point;
public:
TrainingDataPoint(const ImagePoint &imgpt)
: point(imgpt)
{
// other code here as necessary. point has already been initialized
}
};
您阅读的内容是错误的。正确的选择是使用初始化列表
class TrainingDataPoint{
private:
ImagePoint point;
public:
TrainingDataPoint(ImagePoint image_point) : point(image_point){
}
};
顺便说一句,这与私人成员无关,如果他们是公共的,您会遇到同样的问题。
使用构造函数初始化器将解决您的问题。
TrainingDataPoint(const ImagePoint& image_point) : point(image_point){
}
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- 对象声明中的模板"error: expected expression"
- 在运行时有条件地删除类成员或跳过调用该成员对象的构造函数
- 是否可以使用 using 将基类中的公共成员重新声明为派生类中的私有成员?
- MSVC 2017 - 错误 - 如何将模板类 X 的模板成员函数声明为嵌套类 X::Y 的好友
- 为什么我的对象声明不调用默认构造函数?
- C++是否有定义的方法来传递指向类的成员对象的成员函数的指针
- 声明成员对象而不调用其默认构造函数
- 何时应在Qt中将子对象声明为其父类的成员变量
- 将一个类的对象声明为另一个类(C++)的成员
- 如何在声明时间内启动成员对象
- 将对象声明为其自身的成员变量
- C :如何声明私人成员对象
- 将派生对象声明为类中的私有成员时发生编译错误
- 成员对象声明的差异
- C++ 声明类的 const 成员对象
- 试图在c++中声明一个成员对象
- 指向成员对象的成员指针和声明顺序
- 无法将 ifstream 对象声明为我的类中的成员