给这段代码加详细注释 class Parent { public: virtual void func() {} }; class Child : public Parent { public: }; int main() { Parent* p = new Child; auto& parent_tmp = typeid(&Parent::func); auto& child_tmp = typeid(p->func); if (typeid(&Parent::func) != typeid(p->func)) { std::cout << "Child has overridden Parent's virtual function." << std::endl; } else { std::cout << "Child has not overridden Parent's virtual function." << std::endl; } }
时间: 2023-02-08 17:31:02 浏览: 54
这段代码定义了一个名为Parent的类和一个名为Child的类,Child类继承了Parent类。
在Parent类中定义了一个名为func的虚函数,这意味着它可以在子类中被重写。
在main函数中,定义了一个指向Parent类型的指针p,并将其初始化为指向一个Child类型的对象的地址。
最后,定义了一个auto变量,这意味着它的类型由编译器自动推断。在这里,它的类型应该是Parent,因为p是指向Parent类型的指针。
相关问题
class Parent { public: virtual void func() {} }; class Child : public Parent { public: }; int main() { Parent* p = new Child; auto& parent_tmp = typeid(&Parent::func); auto& child_tmp = typeid(p->func); if (typeid(&Parent::func) != typeid(p->func)) { std::cout << "Child has overridden Parent's virtual function." << std::endl; } else { std::cout << "Child has not overridden Parent's virtual function." << std::endl; } } main函数中哪个分支会打印
这段代码定义了一个名为Parent的类,该类有一个公共虚函数func。还定义了一个名为Child的类,该类继承自Parent类。在main函数中,定义了一个指向Child类型的指针p,并用new运算符实例化了一个Child类型的对象。最后用auto推断出p的类型为Parent*。
针对以下程序,哪个选项会出现编译错误 class A { public: virtual void Print( ) = 0 ; private: int a; };
这段程序定义了一个抽象基类 A,其中包含一个纯虚函数 Print() 和一个私有成员变量 a。由于 Print() 是纯虚函数,A 类是抽象类,不能被直接实例化。
在这段程序中,a 是私有成员变量,只能在类的内部访问,不能被外部访问。这个类的设计并没有问题,不会出现编译错误。
但是,如果在类的内部定义一个使用 a 的函数,而该函数是公有函数,那么编译器会报错,因为私有成员变量只能在类的内部访问,外部无法访问。例如:
```c++
class A {
public:
virtual void Print() = 0;
void Func() { a = 10; } // 编译错误,a 是私有的
private:
int a;
};
```
这样的话,编译器会提示“error: ‘int A::a’ is private within this context”。