gpt4 book ai didi

c++ - 是否可以使用基类构造函数使用派生类将值初始化为基类私有(private)成员?

转载 作者:行者123 更新时间:2023-11-28 04:47:13 27 4
gpt4 key购买 nike

我想做的是设置 widthheight Shape 的变量使用 Rectangle 的类类。

形状.h

class Shape
{
public:
Shape(int x, int y);
private:
int width;
int height;
};

形状.cpp

Shape::Shape(int x, int y): width(x), height(y)
{
}

矩形.h

class Rectangle: public Shape
{
public:
Rectangle(int, int);
};

矩形.cpp

Rectangle::Rectangle(int x, int y):Shape(x, y)
{
}

main.cpp

int main()
{
Rectangle rec(10,7);
return 0;
}

我想做的是使用 rec对象初始化 widthheight类的变量 Shape这是私有(private)的。有什么办法吗?或者我需要设置 widthheight要保护的变量?

最佳答案

Rectangle 的当前实现使用其参数正确调用了基本构造函数。使用现代 C++(至少 C++11)可以通过使用 inheriting constructors 简化 Rectangle 的实现。 :

struct Rectangle : public Shape {
using Shape::Shape;
};

要访问private 成员,需要将其更改为public,或者需要在基类中实现getter 方法。或者,您可以使 private 成员成为 protected 并在派生类中实现 getter(尽管 height 对所有派生类都是通用的,它将 setter/getter 放在基类中是合适的)。

class Shape {
/* ... */
public:
int get_height() const { return height; }
};
std::cout << rec.get_height() << std::endl;

关于c++ - 是否可以使用基类构造函数使用派生类将值初始化为基类私有(private)成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49039774/

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