继承
l 继承规则: 若逻辑上B 是 A 的“一种”,并且 A 的所有功能和属性对 B 而言都有意义,则允许 B 继承 A 的 功 能和属性。
l 示例
Classperson{
Public:
voidfun();
private:
tringsex;
intold
};
Classchinese: public person
{
private:
stringfuse;;
};
l 继承方式
1, public 继承 :子类可以访问基类非私有成员,继承后性质不变。
2, protected 继承 : 子类可以访问基类的非私有成员,继承后并将它们转换成 protected 性质。
3, private 继承, 子类可以访问基类的非私有成员,继承后并将它们转换成 privated 属性。
classA
{
public:
inta;
voidfun();
protected:
intb;
private:
intc;
};
l 子类构造方式
先构造基类,再构造子类。基类成员变量的初始化由基类构造函数完成,除此之外,一般子类访问基类都是通过基类的成员函数去访问的(基类的私有成员子类 只能 通过基类的成员函数去访问)。
classAclassB:publicA
{public:A(intx){x=0}{public:B(intx,inty) :A(x) {y=0;}
private:intx;private:inty;
};};
l 本课题目
分别构建学生类和研究生类,其中学生类的基本属性有姓名(私有成员),学分,学时(保护成员),学生类含以下成员函数,带参构造函数,析构函数,增加学时学分函数,求平均学分函数等;研究生类有职称属性,其它属性都由student类继承而来,研究生类需要增加以下成员函数,带参构造函数,析构函数,输出各属性值函数,要求 定义一个研究生对象分别调用各功能函数 。
#include<string >
#include<iostream >
using namespace std ;
class student// 学生类
{
public :
student ( string sname )
{
……
cout<<” 构造 student!”<<endl;
}
~ student()
{cout<<” 析构 student!” ; }
void addcorse ( int hou , int sco ) //增加学时和学分
{
……
}
void getaverage () //平均学分
{
cout << "平均学时: " <<( double ) score / hour << endl ;
}
……
protected :
int hour ; //总学时
float score ; //总学分
private :
string name ;
};
class graduatestudent : public student// 研究生类
{
public :
graduatestudent ( string name , string der ) ……
{
……
cout<<” 构造 graduatestudent !”<<endl;
}
~ graduatestudent ()
{ cout<<” 析构 graduatestudent !” ; }
void print ()
{
cout << "姓名: " << ……< < "学时: " << ……< < "学分: " << ……< < "职称: " << ……< < endl ;
}
private :
string degree ;
};
void main ()
{
graduatestudent cai ( "wang" , "硕士 " );
cai . addcorse (20,40);
cai . getaverage ();
cai . print ();
}
185

被折叠的 条评论
为什么被折叠?



