【发布时间】:2015-01-02 12:01:18
【问题描述】:
我有几个关于 C++ 的一般性问题,我想知道是否有人可以回答。 我正在编写一个 .cpp 文件,其中包含我的老师提供给我们的头文件的实现。我们不允许修改文件。基本上,标题有一个基类船的声明,和 4 种特定类型的船。我的问题是: 1) 基类 ship 的类定义没有提供构造函数。相反,它有一个受保护的 Set 函数,用于设置私有数据成员的值。编译器是否提供默认构造函数? (基本上它会自动将私有 int 变量设置为 1)?因为我使用的是动态内存函数 new 来创建 Ship 派生类的对象。
2) 我有函数头 virtual int size(void) const = 0;在基级船内。我想在另一个成员函数中使用 size() 函数来检查船的大小是否有效。我会在成员函数声明中使用 this->size() 来做到这一点吗? (我已经在每个特定派生类的实现中覆盖了虚函数大小)
非常感谢!如果我需要包含代码或更具体,请告诉我。感谢您的帮助。
【问题讨论】:
-
1)
Does the compiler provide a default constructor?这取决于,但即使这样做,成员ints 也会被默认初始化,即垃圾。 2) 好吧,是的,否则你会怎么做? -
我的问题是,编译器会自动知道选择哪个 size() 函数吗?因为我为每个派生类重写了 size 函数。
-
你的编译器不会(通常不会),虚拟调度是一个运行时特性。如果函数是虚拟的,则“正确”函数将在运行时调用,假设您的代码中没有错误。
标签: c++ inheritance polymorphism protected