C++继承性和多态性(二)

2、派生类的继承方式:
   公有继承(public):保持C++封装特性,保护私有成员,依然是不变的原则。
C++继承性和多态性(二)
#include< iostream >
#include< string >
using namespace std;

//例,显示学生完整情况
class Student
private:
int num;
string name;
char sex;
public:
void display();
void setval(int num, string name,char sex);
};


class Student1 : public Student
private:
int age;
string addr;
public:
void display_1();
void setval(int age, string addr);
};

void Student1::display_1()
{    
// cout<<"num:"<<num<<endl;
// cout<<"name:"<<name<<endl;
// cout<<"sex:"<<sex<<endl;
cout<<"age:"<<age<<endl;
cout<<"address:"<<addr<<endl;
}
void Student::display()
{    
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;

}
void Student::setval(int num, string name,char sex)
{
this->num = num;
this->name = name;
this->sex = sex;
}

void Student1::setval(int age, string addr)
{
this->age = age;
this->addr = addr;
}
int main()
Student1 st1;
st1.Student::setval(10000,"gavin",'f');
st1.setval(12,"nupt");
st1.display();    //调用基类公有函数
        st1.display_1();   //调用派生类函数
return 0;
}
或者
#include< iostream >
#include< string >
using namespace std;

//例,显示学生完整情况
class Student
private:
int num;
string name;
char sex;
public:
void display();
void setval(int num, string name,char sex);
};


class Student1 : public Student
private:
int age;
string addr;
public:
void display_1();
void setval(int age, string addr);
};

void Student1::display_1()
{    
// cout<<"num:"<<num<<endl;
// cout<<"name:"<<name<<endl;
// cout<<"sex:"<<sex<<endl;
display();
cout<<"age:"<<age<<endl;
cout<<"address:"<<addr<<endl;
}
void Student::display()
{    
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;

}
void Student::setval(int num, string name,char sex)
{
this->num = num;
this->name = name;
this->sex = sex;
}

void Student1::setval(int age, string addr)
{
this->age = age;
this->addr = addr;
}
int main()
Student1 st1;
st1.Student::setval(10000,"gavin",'f');
st1.setval(12,"nupt");
// st1.display();    //调用基类公有函数
        st1.display_1();   //调用派生类函数
return 0;
}
私有继承(private):
    私有继承可以阻断下一代派生类继续调用基类成员。
C++继承性和多态性(二)

C++继承性和多态性(二)
#include< iostream >
#include< string >
using namespace std;

//例,显示学生完整情况
class Student
private:
int num;
string name;
char sex;
public:
void display();
void setval(int num, string name,char sex);
};


class Student1 : private Student
private:
int age;
string addr;
public:
void display_1();
void setval(int num, string name,char sex,int age, string addr);
};

void Student1::display_1()
{    
// cout<<"num:"<<num<<endl;
// cout<<"name:"<<name<<endl;
// cout<<"sex:"<<sex<<endl;
display();
cout<<"age:"<<age<<endl;
cout<<"address:"<<addr<<endl;
}
void Student::display()
{    
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;

}
void Student::setval(int num, string name,char sex)
{
this->num = num;
this->name = name;
this->sex = sex;
}

void Student1::setval(int num, string name,char sex,int age, string addr)
{
Student::setval(num,name,sex);
this->age = age;
this->addr = addr;
}
int main()
Student1 st1;
// st1.Student::setval(10000,"gavin",'f');
st1.setval(10000,"gavin",'f',12,"nupt");
// st1.display();    //调用基类公有函数
        st1.display_1();   //调用派生类函数
return 0;
}

  保护继承(protected):
    由protected声明的成员称为“受保护的成员”,或简称“保护成员”。
    保护成员不能被类外访问(等价于私有成员),但可以被派生类的成员函数引用(相当于公有成员)。
    保护继承中,基类的public和protected成员都以protected身份出现在派生类中,基类的private成员不可访问。
C++继承性和多态性(二)
#include< iostream >
#include< string >
using namespace std;

//例,显示学生完整情况
class Student
protected:
int num;
string name;
char sex;
public:
void display();
void setval(int num, string name,char sex);
};


class Student1 : protected Student
private:
int age;
string addr;
public:
void display_1();
void setval(int num, string name,char sex,int age, string addr);
};

void Student1::display_1()
{    
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
// display();
cout<<"age:"<<age<<endl;
cout<<"address:"<<addr<<endl;
}
void Student::display()
{    
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;

}
void Student::setval(int num, string name,char sex)
{
this->num = num;
this->name = name;
this->sex = sex;
}

void Student1::setval(int num, string name,char sex,int age, string addr)
{
Student::setval(num,name,sex);
this->age = age;
this->addr = addr;
}
int main()
Student1 st1;
// st1.Student::setval(10000,"gavin",'f');
st1.setval(10000,"gavin",'f',12,"nupt");
// st1.display();    //调用基类公有函数
        st1.display_1();   //调用派生类函数
return 0;
}
或者

#include< iostream >
#include< string >
using namespace std;

//例,显示学生完整情况
class Student
protected:
int num;
string name;
char sex;
public:
void display();
void setval(int num, string name,char sex);
};


class Student1 : protected Student
private:
int age;
string addr;
public:
void display_1();
void setval(int num, string name,char sex,int age, string addr);
};

void Student1::display_1()
{    
// cout<<"num:"<<num<<endl;
// cout<<"name:"<<name<<endl;
// cout<<"sex:"<<sex<<endl;
display();
cout<<"age:"<<age<<endl;
cout<<"address:"<<addr<<endl;
}
void Student::display()
{    
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;

}
void Student::setval(int num, string name,char sex)
{
this->num = num;
this->name = name;
this->sex = sex;
}

void Student1::setval(int num, string name,char sex,int age, string addr)
{
Student::setval(num,name,sex);
this->age = age;
this->addr = addr;
}
int main()
Student1 st1;
// st1.Student::setval(10000,"gavin",'f');
st1.setval(10000,"gavin",'f',12,"nupt");
// st1.display();    //调用基类公有函数
        st1.display_1();   //调用派生类函数
return 0;
}

posted @ 2014-05-18 17:15  dreamsyeah  阅读(149)  评论(0编辑  收藏  举报