[C++_7]继承_1

13 继承

13.1 继承与访问权限

继承方式对子类内部没啥影响,对外界有影响



父类公开成员

父类保护成员

父类私有成员

公开继承

子类内部

可访问(公开属性)

可访问(保护属性)

不可访问

外界

可访问

不可访问

不可访问

私有继承

子类内部

可访问(私有属性)

可访问(私有属性)

不可访问

外界

不可访问

不可访问

不可访问

保护继承

子类内部

可访问(保护属性)

可访问(保护属性)

不可访问

外界

不可访问

不可访问

不可访问



13.2 派生类初始化

一般依照谁的成员谁维护,在初始化列表中把相应的参数传到父类构造函数中。
 

Teacher(const char*name,bool gender,const char* course)//括号内包括基类所需的参数和子员变量
 :Person(name,gender),course(course) //前面的括号里是实参,可以是子类构造函数总参数表中的参数,也可以使常量和全局变量


13.3 子类同名函数覆盖

子类可以改写来自父类的成员函数,这样把父类的同名成员函数隐藏起来 ,只要同名就会隐藏,与参数表,返回类型无关。

如果想访问父类的同名函数,b.Person::show();

#include<iostream>
#include<string>

using namespace std;

typedef unsigned int unint ;
  enum gender{F,M};
  
class Person
{
protected: 
  string m_name;
  unint m_age;
  gender m_g;
public:
  Person(string name,unint age,gender sex):m_name(name),m_age(age),m_g(sex){};
  void showme(){cout<<"我叫"<< m_name<<"今年"<< m_age<<"岁, "<<"是个"<<string(m_g==F?"帅锅":"美吕")<<endl;};  
};

class Teacher:public Person
{
  string m_course;
public:
  Teacher(string name,unint age,gender sex,string course);
  void showme();
};

Teacher::Teacher(string name,unint age,gender sex,string course):Person(name,age,sex),m_course(course)
{};

void Teacher::showme()
{
  cout<<"我叫"<< m_name<<"今年"<< m_age<<"岁, "
  <<"是个"<<string(m_g==F?"帅锅, ":"美吕, ")<<"还是个教"<< m_course<<"的老师。"
  <<endl;
}

int main()
{
  Person p("小明",18,F);
  Teacher t("小红",28,M,"数学");
  cout << "父类对象调用父类函数:"<<endl;
  p.showme();
  cout << "子类对象调用子类对象:"<<endl;
  t.showme();
  cout << "子类对象调用父类函数:"<<endl;
  t.Person::showme();
  return 0;
}

输出结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值