C++中类的组合和继承关系

来源:互联网 发布:安吉汽车物流知乎 编辑:程序博客网 时间:2024/05/18 12:30

C++中的类有两种关系,分别是组合和继承

继承:一个类是另一个类的特例

人->学生,首先学生是一个人,其次学生还拥有学号等信息

组合:一个类有另一个类的对象

点  圆,圆有圆心和半径,因此在点的基础上扩展一个半径就行了


这里给出组合类的使用:

// complex.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include<stdlib.h>#include<iostream>using namespace std;class Point{public:Point():x(0.0f),y(0.0f){cout << "construct " << endl;}Point(float _x, float _y):x(_x),y(_y){}void print(){cout << "(" << x << ", " << y << ")" << endl;}private:float x;//圆心坐标(x,y)float y;};class Circle{public:Circle();Circle(float x, float y, float _r);void setCircle(float r, Point p);void print();private://由一个点的对象+一个半径即可以构成一个圆Point center;//包含两个成员float radius;};Circle:: Circle(float x, float y, float _r):center(x,y),radius(_r)//注意初始化,若果是继承则初始化时使用Base(*){}Circle::Circle(){}void Circle::setCircle(float r, Point p){radius = r;center = p;}void Circle::print(){cout << "radius = "<<radius<<", 圆心为:";center.print();//注意不能打印x,y因为其实私有变量}int main(){Point p(5, 7);p.print();Circle c;c.setCircle(1, p);c.print();system("pause");    return 0;}

给出继承关系的代码:

// Inherit.cpp : Defines the entry point for the console application.////1.一个类可以继承于另一个类//2.子类继承了父类所有成员,除了构造函数和析构函数,以及赋值重载//3.子类继承父类后,子类的成员部分分为两部分  //(1)继承之父类的部分,base part  //(2)子类的自己的部分//4.子类继承父类后,子类依然不能直接访问父类的私有成员,子类只能通过继承父类的共有成员函数//来访问其父类私有成员//5.子类可以实现与父类成员函数原型相同的函数,即是重写//对于子类的对象son s,访问重写的函数s.father::print(),其中print()是重写函数//子类对象.父类名::函数名//子类可以访问父类的保护成员和共有成员,对于其他来说仍然是不能访问的,比如使用父类对象仍然不能//直接访问受保护的成员,因此受保护的目的是为了使子类使用的//#include "stdafx.h"#include<iostream>#include<stdlib.h>using namespace std;class Base{public:Base(int i):b_Number(i){}~Base();int get_number(){return b_Number;}void print(){cout << "父类私有成员:" << b_Number << endl;}private:int b_Number;//protected://int b_Number;};Base::~Base(){}class Derived:public Base{public:Derived(int i,int j):Base(i),d_Number(j){}//子类有父类的成员变量和自己的成员变量两个成员变量,//因此在构造时需要两个变量,注意这里构造时与复合类的区别~Derived();void print()//子类重写父类函数{cout << get_number() << endl;//通过父类的共有函数访问父类的私有成员//如果父类的b_number是保护类,则子类可以直接调用,而不用通过共有函数借口进行调用//cout << b_Number << endl;cout << d_Number << endl;}private:int d_Number;};Derived::~Derived(){}//子类虽然继承了父类的成员,但不能直接访问私有成员变量/函数//通过共有函数进行访问int main(){Base a(2);//对于父类而言,无论是保护的成员还是私有成员,都不能直接访问,实现了数据隐藏//cout << a.b_Number << endl;Derived b(3, 4);a.print();b.print();b.Base::print();system("pause");    return 0;}


0 0
原创粉丝点击