【发布时间】:2012-05-07 08:31:30
【问题描述】:
在私有继承期间,基类的公共成员变量或成员函数可以在 Derived 中分配回公共访问说明符。 但是我们可以对 Base 类的公共构造函数做同样的事情吗?
我试过如下,
#include <iostream>
using namespace std;
class base
{
public:
base(){}
void print(){ puts("In print"); }
};
class derived : private base
{
public:
base::print;
base::base; /* Throws an error - Declaration doesnt declare anything*/
void display(){ puts("In display"); }
};
int main()
{
derived dObj;
}
它抛出一个错误“声明没有声明任何东西” 我尝试的方法有效吗?
【问题讨论】:
-
这很有趣。但是为什么要作为私有继承然后提供公共访问呢?
-
没有 C++11,你不能从基类继承构造函数——它们要么被派生类的构造函数显式调用,要么隐式调用。对于您希望在
derived中使用的来自base的其他方法,您需要using关键字。 -
@tuxuday - 我读到,如果我们私下继承并希望只为一个或几个成员而不是整个基类提供公共访问权限,我们可以这样做。它适用于成员变量和函数。我也尝试过构造函数。
-
@void-pointer - 所以这意味着即使继承了基类的构造函数也不会被派生继承。事实上,如果没有明确定义,编译器会为每个类的继承层次结构生成一个单独的默认构造函数?
-
不,构造函数永远不会自动继承——在 C++11 中,您可以通过
using显式继承所有基类的构造函数。不管derived的后代的构造函数是否自动生成,它们仍然没有被derived.继承
标签: c++