總結: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