总结:1.不管哪种继承,private下的属性和方法都不能被继承。2. protected继承将基类的protected和public都继承为protected 3. private继承将基类的protected和public都继承为private
2018-04-11
int main(void)
{
Soldier soldier;
// 向士兵属性赋值"tomato"
soldier.m_strName = "tomato";
soldier.Person::m_strName= "Jim";
cout << soldier.m_strName << endl;
cout << soldier.Person::m_strName << endl;
// 调用士兵对象方法
soldier.attack();
soldier.Person::attack();
{
Soldier soldier;
// 向士兵属性赋值"tomato"
soldier.m_strName = "tomato";
soldier.Person::m_strName= "Jim";
cout << soldier.m_strName << endl;
cout << soldier.Person::m_strName << endl;
// 调用士兵对象方法
soldier.attack();
soldier.Person::attack();
最赞回答 / Jedenn
首先确定如下事实:创建派生类对象时,程序首先调用基类构造函数,然后再调用派生类构造函数。(因此,Soldier soldier; 会先调用Person构造函数,后调用Soldier构造函数)Person p = soldier; 使用的是拷贝初始化,调用拷贝构造函数(不是构造函数),当前情况使用的是默认拷贝构造函数Person p; 属于默认初始化,调用的是Person构造函数。无论Person p = soldier; 还是 Person p; 生成的对象p,销毁时都是调用的~Person析构函数。第2...
2018-03-19
Farmer.cpp 代码
#include <iostream>
#include <string>
#include "Farmer.h"
using namespace std;
Farmer::Farmer(string name){
m_strName = name;
cout << "Farmer()"<<endl;}
Farmer::~Farmer(){
cout << "~Farmer()"<<endl;}
void Farmer::sow(){
cout << m_strName <<endl;
cout << "Farmer() --sow()"<<endl;}
#include <iostream>
#include <string>
#include "Farmer.h"
using namespace std;
Farmer::Farmer(string name){
m_strName = name;
cout << "Farmer()"<<endl;}
Farmer::~Farmer(){
cout << "~Farmer()"<<endl;}
void Farmer::sow(){
cout << m_strName <<endl;
cout << "Farmer() --sow()"<<endl;}
2018-03-18