例4.10 在派生类中定义同名成员

/*
	4.3 调整基类成员在派生类中的访问属性的其他方法
	
4.3.1 同名成员
	在定义派生类的时候,C++语言允许在派生类中说明的成员与基类中的成员名字相
同,也就是说,派生类可以重新说明与基类成员同名的成员。 如果在派生类中定义了与基类
成员同名的成员,则称派生类成员覆盖了基类的同名成员,在派生类中使用这个名字意味着
访问在派生类中重新说明的成员。为了在派生类中使用基类的同名成员,必须在该成员名
之前加上基类名和作用域标识符“::”,即必须使用下列格式才能访问到基类的同名成员。

	基类名::成员名
	
	下面的程序段说明了这个要点:
	class X{
		public:
		  inf f();
	};
	class Y:public X{
		public:
		  int f();
		  int g();
	};
	void Y::g(){
	  f();        //表示访问派生类中的f(),即即被调用的函数是Y::f()
	}
	
	对于派生类的对象的访问,也有相同的结论。例如:
	
	Y obj;
	obj.f();     //被访问的函数是Y::f()
	
	如果要访问基类中声明的名字,则应使用作用域标识符限定,例如:
	obj.X::f();  //被调用的函数是X::f()

*/
// 例4.10 在派生类中定义同名成员。

#include<iostream>
#include<string>
using namespace std;
class Student{
	public:
		Student(int number1,string name1,float score1){
			number = number1;
			name = name1;
			score = score1;
		}
		void print(){
			cout<<"number:"<<number<<endl;
			cout<<"name:"<<name<<endl;
			cout<<"score:"<<score<<endl;
		}
	protected:
	  int number;   //学号
	  string name;  //姓名
	  float score;	//成绩
};

class UStudent:private Student{  //声明私有派生类UStudent
	public:
	  UStudent(int number1,string name1,float score1,string major1):Student(number1,name1,score1){  //定义派生类构造函数时,缀上基类的构造函数
	  	major = major1;	
	  }
	void print(){
		Student::print();
		cout<<"major:"<<major<<endl;
	}
	private:
	  string major;
};

int main(){
	UStudent stu(22116,"张果老",99,"神仙专业");
	stu.print();  //调用的是派生类中的成员函数print
	return 0;
}

/*
	在本例的基类Student中定义了成员函数print,在派生类UStudent中,重新定义了成
员函数print。在主程序中派生类对象stu调用的是派生类中的成员函数print,为了调用基
类的成员函数print,可以在派生类的成员函数print中调用基类的成员函数print,但必须
在该成员名之前加上基类名和作用域标识符::,即Student::。在面向对象程序设计中,若
要在派生类中对基类继承过来的某些函数功能进行扩充和改造,都可以通过这样的覆盖来
实现。这种覆盖的方法,是对基类成员改造的关键手段,是程序设计中经常使用的方法。
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值