13周项目1

来源:互联网 发布:数据挖掘属于哪个专业 编辑:程序博客网 时间:2024/04/26 05:36

原代码

/* * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 作    者:李慧慧 * 完成日期:2013  年  5 月 29  日 * 版 本 号:v1.0 * 输入描述: * 问题描述:【项目1】理解基类中成员的访问限定符和派生类的继承方式*由下面派生类StudentB对基类StudentA的继承……* 程序输出: * 问题分析: * 算法设计:略 */#include <iostream>#include<string>using namespace std;class StudentA //(1)修改studentA类中各数据成员和成员函数的访问限定符,并观察发生的现象{public:    StudentA(int n,string nam,char s);    void showA();    ~StudentA( ) { }protected:    int num;    string name;    char sex ;};class StudentB: public StudentA //(2)修改此处的继承方式,并观察发生的现象{public:    StudentB(int n,string nam,char s,int a,string ad);    void showB( );    ~StudentB( ) { }private:int num;    int age;    string addr;};StudentA::StudentA(int n,string nam,char s){    num=n;    name=nam;    sex=s;}void StudentA::showA(){    cout<<"num: "<<num<<endl;    cout<<"name: "<<name<<endl;    cout<<"sex: "<<sex<<endl<<endl;}StudentB::StudentB(int n,string nam,char s,int a,string ad):StudentA(n,nam,s){    age=a;    addr=ad;}void StudentB::showB( ){    cout<<"num: "<<num<<endl;    cout<<"name: "<<name<<endl;    cout<<"sex: "<<sex<<endl;    cout<<"age: "<<age<<endl;    cout<<"address: "<<addr<<endl<<endl;}int main( )  //(3)思考由于访问限定符和继承方式的改变,会引发什么现象的发生,并作出解释{    StudentB stud1(10010,"Wang-li",'f',19,"115 Beijing Road,Shanghai");    StudentB stud2(10011,"Zhang-fun",'m',21,"213 Shanghai Road,Beijing");    StudentA stud3(20010,"He-xin",'m');    stud1.showB( );    stud2.showA( );    stud3.showA( );    return 0;}


运行结果:

修改1:num不再是studentA的数据成员

#include <iostream>#include<string>using namespace std;class StudentA //(1)修改studentA类中各数据成员和成员函数的访问限定符,并观察发生的现象{public:    StudentA(int n,string nam,char s);    void showA();    ~StudentA( ) { }protected:    //int num;    string name;    char sex ;};class StudentB: public StudentA //(2)修改此处的继承方式,并观察发生的现象{public:    StudentB(int n,string nam,char s,int a,string ad);    void showB( );    ~StudentB( ) { }private:int num;    int age;    string addr;};StudentA::StudentA(int n,string nam,char s){    //num=n;    name=nam;    sex=s;}void StudentA::showA(){    //cout<<"num: "<<num<<endl;    cout<<"name: "<<name<<endl;    cout<<"sex: "<<sex<<endl<<endl;}StudentB::StudentB(int n,string nam,char s,int a,string ad):StudentA(n,nam,s){    age=a;    addr=ad;}void StudentB::showB( ){    cout<<"num: "<<num<<endl;    cout<<"name: "<<name<<endl;    cout<<"sex: "<<sex<<endl;    cout<<"age: "<<age<<endl;    cout<<"address: "<<addr<<endl<<endl;}int main( )  //(3)思考由于访问限定符和继承方式的改变,会引发什么现象的发生,并作出解释{    StudentB stud1(10010,"Wang-li",'f',19,"115 Beijing Road,Shanghai");    StudentB stud2(10011,"Zhang-fun",'m',21,"213 Shanghai Road,Beijing");    StudentA stud3(20010,"He-xin",'m');    stud1.showB( );    stud2.showA( );    stud3.showA( );    return 0;}


运行结果:

修改2

用私有继承方式声明派生类StudentB

int main( )  //(3)思考由于访问限定符和继承方式的改变,会引发什么现象的发生,并作出解释{    StudentB stud1(10010,"Wang-li",'f',19,"115 Beijing Road,Shanghai");    StudentB stud2(10011,"Zhang-fun",'m',21,"213 Shanghai Road,Beijing");    StudentA stud3(20010,"He-xin",'m');    stud1.showB( );    stud2.showA( );//错误,私有基类的公用成员函数在派生类中是私有函数    stud3.showA( );    return 0;}