定义一个类的实例时,受保护(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 构造函数。
这种设计通常用于实现某种限制或控制,确保类的实例化只能在特定的上下文中进行。
759

被折叠的 条评论
为什么被折叠?



