要公开ChildClass属性,可以通过以下两种方式实现:
示例代码如下:
class ParentClass {
public:
virtual std::string getChildClassProperty() {
return "ParentClass";
}
};
class ChildClass1 : public ParentClass {
public:
std::string getChildClassProperty() override {
return "ChildClass1";
}
};
class ChildClass2 : public ParentClass {
public:
std::string getChildClassProperty() override {
return "ChildClass2";
}
};
int main() {
ParentClass* obj1 = new ChildClass1();
ParentClass* obj2 = new ChildClass2();
std::cout << obj1->getChildClassProperty() << std::endl; // 输出 ChildClass1
std::cout << obj2->getChildClassProperty() << std::endl; // 输出 ChildClass2
delete obj1;
delete obj2;
return 0;
}
在上述示例中,ParentClass定义了一个虚拟函数getChildClassProperty(),并在ChildClass1和ChildClass2中进行了重写。通过创建ParentClass指针,并分别指向ChildClass1和ChildClass2的对象,可以调用getChildClassProperty()函数获取相应的属性值。
示例代码如下:
class ParentClass {
public:
std::string parentProperty;
};
class ChildClass1 : public ParentClass {
public:
std::string childProperty1;
};
class ChildClass2 : public ParentClass {
public:
std::string childProperty2;
};
int main() {
ParentClass* obj = new ChildClass1();
ChildClass1* childObj1 = dynamic_cast<ChildClass1*>(obj);
ChildClass2* childObj2 = dynamic_cast<ChildClass2*>(obj);
if (childObj1 != nullptr) {
childObj1->childProperty1 = "ChildClass1 Property";
std::cout << childObj1->childProperty1 << std::endl; // 输出 ChildClass1 Property
}
if (childObj2 != nullptr) {
childObj2->childProperty2 = "ChildClass2 Property";
std::cout << childObj2->childProperty2 << std::endl; // 不会执行,因为obj实际上是ChildClass1类型的对象
}
delete obj;
return 0;
}
在上述示例中,通过将ParentClass指针obj转换为ChildClass1指针childObj1,可以访问ChildClass1的属性childProperty1。如果obj实际上是ChildClass2类型的对象,则转换为ChildClass2指针childObj2,并可以访问ChildClass2的属性childProperty2。需要注意的是,类型转换使用dynamic_cast进行安全的运行时类型检查,以确保转换的正确性。
以上是两种常见的方法来公开ChildClass属性,具体选择哪种方法取决于实际需求和设计。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云