C++ c++;自动';输入cast';转换
有人能解释一下为什么下面的代码在出错时不编译吗C++ c++;自动';输入cast';转换,c++,types,casting,C++,Types,Casting,有人能解释一下为什么下面的代码在出错时不编译吗 Error 1 error C2243: 'type cast' : conversion from 'Der *' to 'Base *' exists, but is inaccessible d:\users\lzizva\documents\mta\c++\projects\temp1\17022014.cpp 50 1 temp1 Error 2 error C2243: 'type cast' : conve
Error 1 error C2243: 'type cast' : conversion from 'Der *' to 'Base *' exists, but is inaccessible d:\users\lzizva\documents\mta\c++\projects\temp1\17022014.cpp 50 1 temp1
Error 2 error C2243: 'type cast' : conversion from 'Der *' to 'Base *' exists, but is inaccessible d:\users\lzizva\documents\mta\c++\projects\temp1\17022014.cpp 51 1 temp1
3 IntelliSense: conversion to inaccessible base class "Base" is not allowed d:\users\lzizva\documents\mta\c++\projects\temp1\17022014.cpp 50 12 temp1
4 IntelliSense: conversion to inaccessible base class "Base" is not allowed d:\users\lzizva\documents\mta\c++\projects\temp1\17022014.cpp 51 14 temp1
我认为,当存在私有继承时,子类会获得所有属性和方法,并将它们设置为私有,它只会影响子类的子类。
我错过了什么?
编译器实际上做什么
提前感谢,,
利隆
#包括
使用名称空间std;
阶级基础
{
int n;
基地*下一个;
公众:
Base(int n,Base*next=NULL):n(n),next(next)
{}
虚空打印()常量
{
cout问题在于构造2
和3
:Der
构造函数采用Base*
,但您正在传递Der*
指针
由于Der
私有派生自Base
,因此Der
->Base
转换在main()
中是不可访问的,因此会出现错误。尽管基类型和派生类型之间存在紧密耦合,私有继承是“has-a”关系,而不是“is-a”。它确实适合于继承实现,而不是接口,而且正如您所发现的,它不能用于多态性,因为对基类型的引用或指针不能绑定到派生类型的实例
当你打这个电话的时候
Der two(2, &one);
您正试图将&one
,一个派生的*
绑定到一个基*
有关私有继承的更多信息,请参见
Der two(2, &one);