15. 继承

代码重用: 组合、继承

组合:拿已有的对象拼接出新的对象. (实的)

继承: 拿已有的类进行改造,得到新的类.(虚的)

这里写图片描述

Person: 父类
Student: 子类

这里写图片描述

传统做法:老类放在上面,新的类放在下面.

#include <iostream>
using namespace std;

class A
{
  public:
    A():i(0) { cout << "A::A()" << endl; }
    ~A() { cout << "A::~A()" << endl; }
    void print() { cout << "A::f()" << i << endl; }
    void set(int ii) { i = ii; }
  private:
    int i;
};

//继承 B是A的子类
class B:public A {
};

int main()
{
  B b; //B继承了A所有的东西
       //类B是A的子类,当申请对象b时将自动调用A的构造函数  
       //A::A()
  b.set(10);
  b.print();  //A::f()10
  return 0;
              //运行完程序return 0后,将调用A的析构函数
              //A::A()
}
#include "stdafx.h"
#include <iostream>
using namespace std;

class A
{

private:
    int i;

public:
    A():i(0) { cout << "A::A()" << endl; }
    ~A() { cout << "A::~A()" << endl; }
    void print() { cout << "A::f()" << i << endl; }
    void set(int ii) { i = ii; }

};

//继承 B是A的子类
class B :public A {
public:
    void f() { 
    set(20); 
    print(); 
    //i = 90;//此代码会出错,原因是i是A的private成员变量,只能被A类的成员函数使用,不能被B使用.
    }
};

int main()
{
    B b; //B继承了A所有的东西
         //调用A的构造函数
         //A::A()
    b.set(10);
    b.print(); //A::f()10
    b.f(); //A::f()20
    return 0;
           //A::`A()
}
//public:被谁都可以使用
//private:被自己类的成员函数使用
//protected:被自己类和子子孙孙类使用
#include "stdafx.h"
#include <iostream>
using namespace std;

class A
{
private:
    int i;
public:
    A():i(0) { cout << "A::A()" << endl; }
    ~A() { cout << "A::~A()" << endl; }
    void print() { cout << "A::f()" << i << endl; }
protected:
    void set(int ii) { i = ii; }
};

//继承 B是A的子类
class B :public A {
public:
    void f() { 
    set(20); 
    print(); 
    //i = 90;//此代码会出错,原因是i是A的private成员变量,只能被A类的成员函数使用,不能被B使用.
    }
};

int main()
{
    B b; //B继承了A所有的东西
         //调用A的构造函数     
    //b.set(10); //此代码会出错,原因在于set()函数在A类中是protected, 只能被自己类和子子孙孙类调用.故此行出错. 
    b.print(); 
    b.f(); 
    return 0;

}
//public:被谁都可以使用
//private:被自己类的成员函数使用
//protected:被自己类和子子孙孙类使用           

一般写程序的方式:
(1). 让数据都是private
(2). 给所有人用的东西放在public里面
(3). 留一些protected接口给子类, 告诉子类用protected的东西来访问private的数据. 这些手段只留给你.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值