已采纳回答 / C_can
is a”代表的是类之间的继承关系,“has a”代表的是对象和它的成员的从属关系。c++还有另一种实现has-a关系的途径----私有继承。使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员。这意味着基类方法将不会成为派生对象公有接口的一部分,但可以在派生类的成员函数中使用它们。使用公有继承,基类的公有方法将成为派生类的公有方法。简而言之,派生类将继承基类的接口,这是is-a关系的一部分。使用私有继承,基类的公有方法将成为派生类的私有方法。简而言之,派生类不能继承基类的接口。正如从被包含对象...
2017-10-16
已采纳回答 / 慕尼黑2258629
你说的没错,私有继承中,在子类中可以访问父类的保护成员。B类由A类私有派生,那么在B类中可以访问A类的public、protected,但是不能访问A类的private。在B类外,B类对象不能访问A类的成员,只能访问B类的public。C类由B类私有派生,那么C类中不能访问B类的private(其中包含了A类的public、protected),但是可以访问B类的public、protected。在C类外,C类对象只能访问C类的public。
2017-08-12
已采纳回答 / TTshuanger
S.m_strName = "Jim"; 这句话有问题,protected继承后,string m_strName就由public变为protected,所以直接访问就会出错
2017-06-29
最新回答 / 大力出奇迹丶
个人认为,当你使用test1时,调用了一次person的默认拷贝函数去实例了一个临时的person,所以在运行结果中只有一次构造函数。但是,运行结束之后同样也是要把这个临时的person给析构掉的,所以运行了两次person的析构函数,(~person是运行了析构函数的意思)
2017-06-18