定义一个类的实例时,受保护(protected
)构造函数只能在该类的派生类中调用。因此,如果想在定义类实例时调用一个 protected
构造函数,需要通过派生这个类来实现。
以下是一个示例,展示了如何在派生类中调用 protected
构造函数:
示例代码
#include <iostream>
#include <string>
class Base {
protected:
// Protected 构造函数
Base(int value) : value_(value) {
std::cout << "Base constructor called with value: " << value_ << std::endl;
}
int value_;
};
class Derived : public Base {
public:
// Derived 类的构造函数,调用 Base 的 protected 构造函数
Derived(int value) : Base(value) {
std::cout << "Derived constructor called." << std::endl;
}
void display() const {
std::cout << "Value: " << value_ << std::endl;
}
};
int main() {
// 创建 Derived 类的实例,间接调用 Base 的 protected 构造函数
Derived obj(10);
obj.display();
return 0;
}
代码解释
-
基类定义:
Base
类有一个protected
构造函数,只能被派生类访问。构造函数接收一个int
参数并将其存储在成员变量value_
中。 -
派生类定义:
Derived
类是Base
的子类。在Derived
的构造函数中,通过Base(value)
调用Base
的protected
构造函数。 -
实例化对象:在
main
函数中,您可以创建Derived
类的实例obj
,这将间接调用Base
的构造函数。 -
成员函数:通过调用成员函数
display()
,可以输出Base
类中的value_
的值。
输出结果
Base constructor called with value: 10
Derived constructor called.
Value: 10
总结
由于 protected
构造函数只能在派生类中访问,因此您需要创建一个派生类,并通过派生类的构造函数来调用基类的 protected
构造函数。
这种设计通常用于实现某种限制或控制,确保类的实例化只能在特定的上下文中进行。