一文展示C++中类的继承与派生的要点

C++中类的继承与派生语法:

(子类继承于父类,父类派生出子类,这两个是一个意思)

class 子类名:[继承方式] 父类名{
  子类新增加的成员
};


C++中的三种继承方式:
在这里插入图片描述


C++继承时的名字遮蔽问题:
  如果子类中的成员(包括成员变量和成员函数)和父类中的成员重名,那么就会遮蔽从子类继承过来的成员。所谓遮蔽,就是覆盖,子类成员覆盖了父类成员,当然就不是重载。


一个代码展示类的继承与派生:

/* 类的继承与派生 */

/************************************************************** 
* Includes 
***************************************************************/ 
#include <iostream>

/************************************************************** 
* Class Father lv1
***************************************************************/ 
class Game{
		
	private:
		/*----------------成员变量--------------*/
		char* game_name;
		int game_age;
	
	
	public:
		/*----------------构造函数--------------*/
		Game(){
			this->game_name = "Dota2";
			this->game_age = 10;
		}
		
		Game(char* name,int age){//构造函数重载 
			this->game_name = name;
			this->game_age = age;
		}
		
		/*----------------成员函数--------------*/
		int setGameName(char* name){
			this->game_name = name;
			return 0;
		}
		
		int setGameAge(int age){
			this->game_age = age;
			return 0;
		}
		
		char* getGameName(void){
			return this->game_name;
		} 
		
		int getGameAge(void){
			return this->game_age;
		} 
		
		void show(void){
			std::cout<<game_name<<"-"<<game_age<<"年"<<std::endl;
		}
};

/************************************************************** 
* Class Child lv2
***************************************************************/ 

class Hero: public Game{
	
	private:
		/*----------------成员变量--------------*/
		char* hero_name;
		int hero_skill_num;
		
	public:
		/*----------------构造函数--------------*/
		//值得注意的是此处的子类的构造函数写法: 
		Hero():Game(){
			this->hero_name = "Invoker";
			this->hero_skill_num = 11;
		}
		
		Hero(char* hero_name,int hero_skill_num):Game(){//构造函数重载 
			this->hero_name = hero_name;
			this->hero_skill_num = hero_skill_num;
		}
		
		Hero(char* game_name,int game_age,char* hero_name,int hero_skill_num)
			:Game(game_name,game_age){//构造函数重载 
			this->hero_name = hero_name;
			this->hero_skill_num = hero_skill_num;
		}
		
		/*----------------成员函数--------------*/
		int setGameName(char* name){
			Game::setGameName(name);
			return 0;
		}
		
		int setGameAge(int age){
			Game::setGameAge(age);
			return 0;
		}
		
		int setHeroName(char* name){
			this->hero_name = name;
			return 0;
		}
		
		int setHeroSkillNum(int num){
			this->hero_skill_num = num;
			return 0;
		}
		
		void show(void){
			Game::show();
			std::cout<<hero_name<<"-"<<hero_skill_num<<"个技能"<<std::endl;
		}
};


/************************************************************** 
* Class Child lv3
***************************************************************/ 
class Skill: public Hero{
	private:
		char* skill_name;
	
	public:
		/*----------------构造函数--------------*/
		Skill():Hero(){
			this->skill_name = "哈雷克之火葬魔咒";
		}
		
		Skill(char* name):Hero(){
			this->skill_name = name;
		} 
		
		Skill(char* hero_name,int hero_skill_num,char* name)
			:Hero(hero_name,hero_skill_num){
			this->skill_name = name;
		} 
		
		Skill(char* game_name,int game_age,char* hero_name,int hero_skill_num,char* name)
			:Hero(game_name,game_age,hero_name,hero_skill_num){
			this->skill_name = name;
		}
		/*----------------成员函数--------------*/
		void show(void){
			Hero::show();
			std::cout<<skill_name<<std::endl;
		}
		/*....*/
}; 




/************************************************************** 
* Main Function
***************************************************************/ 

int main(int argc, char** argv) {
	
	Game A;
	A.show();
	std::cout<<std::endl; 
	
	Hero B("Lina",4);
	B.show();
	std::cout<<std::endl; 
	
	Skill C;
	C.show();
	std::cout<<std::endl; 
	
	Skill D("Jugg",4,"无敌斩");
	D.show();
	std::cout<<std::endl; 
	
	return 0;
}
写出一个People,并由该做基派生出子Employee和Teacher。其中People具有name、age两个保护成员变量,分别为String型和整型,且具有共有的getAge()成员方法,用于返回age变量的值,并编写一个两个参数的构造函数。Employee具有保护成员String变量employeeNo,Teacher有String型的teano和zc变量,并分别为两个编写一个无参的构造函数。若使两个正常的编译,请在父中解决该问题。 public class Employee extends People{ protected String employeeNo ; //construct method Employee() { } } package Exercise1; public class People { protected String name ; protected int age ; //construct method People() { } People(String name,int age) { this.name = name ; this.age = age ; } //getAge public int getAge() { return this.age ; } } package Exercise1; public class Teacher extends People{ protected String teano ; protected String zc ; //construct method Teacher() { } } package Exercise1; public class MainTest { public static void main(String[] args) { // TODO Auto-generated method stub Employee em = new Employee(); em.age = 20; em.employeeNo = "1234560"; em.name = "Jim" ; System.out.println("Employee : name :"+em.name+"age:"+em.age+"emplyeeNo:"+em.employeeNo); Teacher tea = new Teacher(); tea.age = 26; tea.name = "Tom" ; tea.teano= "456"; tea.zc = "Go" ; System.out.println("Teacher : name :"+tea.name+"age:"+tea.age+"teano:"+tea.teano+"zc:"+tea.zc); } } 题目:判断101-200之间有多少个素数,并输出所有素数。 public class SuShu { public static void main(String[] args) { int m; int i; int k=0; for(m=1;m<=100;m++) { for(i=2;i=10000 && s1<100000) :"); String s2 = new StringBuffer(s1).reverse().toString(); if(s1.equals(s2)){ JOptionPane.showMessageDialog(null,"yes"); }else{ JOptionPane.showMessageDialog(null,"no"); } } } 题目:打印出杨辉三角形(要求打印出10行 import java.util.Scanner; public class YHSanJiao { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Enter a data:"); int n = input.nextInt(); int[][] a = new int[n][n]; for(int i = 0; i<n ; i++){ for(int j = 0; j userAnswer.length()){ if(checkString(correctAnswer,userAnswer)) return 2; else return 0; } else return 0; } public static boolean checkString (String correctAnswer,String userAnswer ){ boolean m = true; for(int i = 0; i < userAnswer.length(); ++i){ if(correctAnswer.indexOf(userAnswer.charAt(i))==-1){ m= false; break; } } return m ; } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值