Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7724012
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: C/C++

2011-08-05 20:39:19

/*

 * 继承

 * 从基类CPoint(点)公有派生类CCircle(圆)、CClinder(圆柱体)的声明

* 简单展示继承的优点

 * Lzy   2011-8-5

 */

 

#include

using namespace std;

 

class CPoint

{

protected:

   float x, y;

public:

   CPoint(float _x, float _y):x(_x),y(_y){}

   float getX(){return x;}

   float getY(){return y;}

};

 

class CCircle : public CPoint

{

protected:

   float r;

public:

   CCircle(float _r):r(_r){}

   double area(){return 3.14*r*r;}

   double circumference(){return 3.14*2*r;}

};

 

class CClinder:public CCircle

{

protected:

   float h;

public:

   CClinder(int _h):h(_h){}

   float volume(){return 3.14*r*r*h;}

};

 

 

/*

 * 公有继承

 * 从基类学生公有派生研究生类

 * Lzy   2011-8-5

 */

 

#include

#include

using namespace std;

 

class Student

{

private:

   char *name;

   int No;

public:

   Student(char *nstr="", int n=0)

   {    

      name = new char[strlen(nstr)+1];    

      strcpy(name, nstr);

      No = n;

   }

   ~Student(){delete[] name;}

   char * getname(){return name;}

   int getNo(){return No;}

};

 

class GraduateStudent : public Student

{

private:

   char *instructor;

public:

   GraduateStudent(char *nstr="", int n=0, char *dstr=""):Student(nstr,n)

   {

      instructor = new char[strlen(dstr)+1];

      strcpy(instructor, dstr);

   }

   ~GraduateStudent(){delete[] instructor;}

   char *getInstructor(){return instructor;}

};

 

int main(void)

{

   GraduateStudent lzy("罗志勇", 1001,"Lzy");

   cout<<"姓名:"<"\t"

      <<"学号:"<"\t"

      <<"导师:"<

   cout<

   return 0;

}

 

 

/*

 * 私有继承

 * Lzy   2011-8-5

 */

 

#include

using namespace std;

 

class A

{

private:

   int a;

public:

   A():a(1){}

   int getA(){return a;}

   void print(){cout<<"A a="<

};

 

class B : private A

{

private:

   int b;

public:

   void setB(){b=getA()+10;}

   void print()

   {

      A::print();

      cout<<"B b="<

   }

};

 

int main(void)

{

   A a;

   a.print();

 

   B b;

   b.setB();

   b.print();

 

   return 0;

}

 

 

/*

 * 私有继承

 * Lzy   2011-8-5

 */

 

#include

using namespace std;

 

class A

{

private:

   int a;

public:

   A():a(1){}

   int getA(){return a;}

   void print(){cout<<"A a="<

};

 

class B : private A

{

private:

   int b;

public:

   void setB(){b=getA()+10;}

   void print()

   {

      A::print();

      cout<<"B b="<

   }

};

 

int main(void)

{

   A a;

   a.print();

 

   B b;

   b.setB();

   b.print();

 

   return 0;

}

 

 

 

/*

 * 保护继承

 * 从基类学生公有派生研究生类

 * Lzy   2011-8-5

 */

 

#include

#include

using namespace std;

 

class Student

{

private:

   char *name;

   int No;

public:

   Student(char *nstr="", int n=0)

   {    

      name = new char[strlen(nstr)+1];    

      strcpy(name, nstr);

      No = n;

   }

   ~Student(){delete[] name;}

   char * getname(){return name;}

   int getNo(){return No;}

};

 

class GraduateStudent : protected Student

{

private:

   char *instructor;

public:

   GraduateStudent(char *nstr="", int n=0, char *dstr=""):Student(nstr,n)

   {

      instructor = new char[strlen(dstr)+1];

      strcpy(instructor, dstr);

   }

   ~GraduateStudent(){delete[] instructor;}

   char *getInstructor(){return instructor;}

   int getNo(){return Student::getNo();}

   char *getname(){return Student::getname();}

};

 

int main(void)

{

   GraduateStudent lzy("罗志勇", 1001,"Lzy");

   cout<<"姓名:"<"\t"

      <<"学号:"<"\t"

      <<"导师:"<

   cout<

   return 0;

}

 

 

/*

 * 继承

 * 类中包含子对象的构造函数的执行情况

 * Lzy   2011-8-5

 */

 

#include

#include

using namespace std;      

 

class CPoint

{

private:

   float x, y;

public:

   CPoint(float _x, float _y):x(_x),y(_y){cout<<"构造函数CPoint被调用:"<" "<

   CPoint(CPoint & p):x(p.x),y(p.y){cout<<"复制构造函数CPoint被调用:"<" "<

   void display(){cout<" "<

};

 

class CCline

{

private:

   CPoint start, end;

public:

   CCline(float x1, float y1, float x2, float y2):start(x1,y1),end(x2,y2)

   {cout<<"构造函数CCline被调用";start.display();end.display();}

   CCline(CPoint &p1, CPoint &p2):start(p1),end(p2)

   {cout<<"复制构造函数CCline被调用";start.display();end.display();}

};

 

int main(void)

{

   CPoint p1(12,15),p2(25,35);

   CCline c1(1,1,2,2),c2(p1,p2);

   return 0;

}

 

阅读(1441) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~