没有默认构造函数的成员对象的 C++ 初始化:
C++ Initialization of member objects which do not have default constructor:
类似的问题已经得到解答,但我仍然找不到解决问题的方法。我确实无法调用 class Point inside class Rectangle 的构造函数。看了一些答案后,我大概会这样,但是不行:
class Point {
public:
Point(int x, int y);
private:
int x;
int y;
};
Point::Point(int xx, int yy) {
x = xx;
y = yy;
}
class Rectangle {
public:
Rectangle(Point a, Point b) : Point(int x, int y); // this is wrong
private:
Point a;
Point b;
};
Rectangle::Rectangle(Point aa, Point bb) : Point(int x, int y) { // same as above
?
}
任何人都可以帮助我了解如何实现和修复此代码(我知道将 Rectangle 声明为结构会使它更容易)?
不清楚您希望此行做什么:
Rectangle(Point a, Point b) : Point(int x, int y);
初始化成员的地方不是构造函数体。成员初始化器列表的正确语法是:
Rectangle(Point a, Point b) : a(a), b(b) {}
请注意,初始化列表是阴影不是问题的地方,您可以为参数和成员使用相同的名称,因为没有歧义。 a(a)
使用参数 a
.
初始化成员 a
请注意,Point
的构造函数也应为:
Point::Point(int xx, int yy) : x(xx),y(yy) {
}
对于 int
成员,它不会产生巨大差异,但对于 class 类型,它确实产生巨大差异:成员在构造函数主体运行之前初始化。在构造函数中先初始化然后赋值是低效的,有时甚至是错误的。另一方面,当成员为 int
s.
时,没有理由不使用初始化列表
PS
(I know that declaring Rectangle as a struct makes it way easier)?
我认为您指的是结构中 public 的成员。然而,struct
和 class
只是声明一个 class 的两个不同的关键字。唯一的区别是默认访问权限(有关详细信息,请参见此处:When should you use a class vs a struct in C++?)并且这两个定义是相同的:
class foo {
int a;
public:
int b;
};
struct foo {
private:
int a;
public:
int b;
};
类似的问题已经得到解答,但我仍然找不到解决问题的方法。我确实无法调用 class Point inside class Rectangle 的构造函数。看了一些答案后,我大概会这样,但是不行:
class Point {
public:
Point(int x, int y);
private:
int x;
int y;
};
Point::Point(int xx, int yy) {
x = xx;
y = yy;
}
class Rectangle {
public:
Rectangle(Point a, Point b) : Point(int x, int y); // this is wrong
private:
Point a;
Point b;
};
Rectangle::Rectangle(Point aa, Point bb) : Point(int x, int y) { // same as above
?
}
任何人都可以帮助我了解如何实现和修复此代码(我知道将 Rectangle 声明为结构会使它更容易)?
不清楚您希望此行做什么:
Rectangle(Point a, Point b) : Point(int x, int y);
初始化成员的地方不是构造函数体。成员初始化器列表的正确语法是:
Rectangle(Point a, Point b) : a(a), b(b) {}
请注意,初始化列表是阴影不是问题的地方,您可以为参数和成员使用相同的名称,因为没有歧义。 a(a)
使用参数 a
.
a
请注意,Point
的构造函数也应为:
Point::Point(int xx, int yy) : x(xx),y(yy) {
}
对于 int
成员,它不会产生巨大差异,但对于 class 类型,它确实产生巨大差异:成员在构造函数主体运行之前初始化。在构造函数中先初始化然后赋值是低效的,有时甚至是错误的。另一方面,当成员为 int
s.
PS
(I know that declaring Rectangle as a struct makes it way easier)?
我认为您指的是结构中 public 的成员。然而,struct
和 class
只是声明一个 class 的两个不同的关键字。唯一的区别是默认访问权限(有关详细信息,请参见此处:When should you use a class vs a struct in C++?)并且这两个定义是相同的:
class foo {
int a;
public:
int b;
};
struct foo {
private:
int a;
public:
int b;
};