15. 继承

来源:互联网 发布:win10共享网络 编辑:程序博客网 时间:2024/06/05 07:00

代码重用: 组合、继承

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

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

这里写图片描述

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的数据. 这些手段只留给你.