美文网首页
C++ 派生类对象转换成基类对象

C++ 派生类对象转换成基类对象

作者: ebayboy | 来源:发表于2019-09-30 09:26 被阅读0次

/* class_protect.class */

/* 基类转换派生类问题:(不安全的转换)

既然转换了那就是指向派生类了,调用函数不涉及到变量还可以,

如果涉及到变量就是不安全的了,

如果是基类转派生类, 那么基类不含有派生类的成员, 这样调用就可能出现安全问题  

*/

/*  派生类转基类 (安全的转换) 

比较常规的做法是派生类指针转换成基类的  */

/*  

#include <iostream>

#include <cstring>

using namespace std;

/* ================  CLASS BOX ================== */

class Box

{

private:

double height;

protected:

double width;

public:

void setHeight(double h);

double getHeight(void);

};

void Box::setHeight(double h)

{

height = h;

}

double Box::getHeight(void)

{

return height;

}

/* ================== CLASS SMALLBOX =========================== */

class SmallBox : Box

{

public:

void setSmallWidth(double wid);

double getSmallWidth(void);

void setSmallHeight(double h);

double getSmallHeight(void);

};

double SmallBox::getSmallWidth()

{

return width;

}

void SmallBox::setSmallWidth(double wid)

{

width = wid;

}

void SmallBox::setSmallHeight(double h)

{

setHeight(h);

}

double SmallBox::getSmallHeight(void)

{

return getHeight();

}

/* ==========================  MAIN ======================= */

int main()

{

SmallBox *small = new SmallBox();

/* 访问顺序  派生类public函数 -> 基类public成员 */

small->setSmallWidth(5.0);

cout << "SmallWidth:" << small->getSmallWidth() << endl;

/* 访问顺序 派生类public函数 -> 基类public函数 -> 基类private成员  */

small->setSmallHeight(11.01);

cout << "getSmallHeight:" << small->getSmallHeight() << endl;

/* 派生类转换成基类 */

Box *b = (Box *)small;

cout << "Before convert , Box Height: " << b->getHeight() << endl;

/* 基类设置height */

b->setHeight(20.01);

/* 结果都是 20.01 */

cout << "After convert Box Height: " << b->getHeight() << endl;

cout << "After convert SmallBox Height: " << small->getSmallHeight() << endl;

return 0;

}

相关文章

  • <C++程序设计>访问权限,虚函数,继承

    派生类访问权限 派生类对象的体积 = 基类对象的体积 +派生类对象自己的成员变量的体积 ,派生类对象包含着基类对象...

  • C++ - 继承与派生类

    派生类对象的体积,等于基类对象的体积,再加上派生类对象自己的成员变量的体积。在派生类对象中,包含着基类对象,而且基...

  • C++ - public继承的赋值兼容规则

    public继承的赋值兼容规则 派生类的对象可以赋值给基类对象 派生类对象可以初始化基类引用 派生类对象的地址可以...

  • 10 多态 抽象

    /*多态本质:c++ 允许将派生类对象的地址赋予基类的指针所有派生类的本质都是is a 的基类基类的指针调用任何方...

  • C++ 派生类对象转换成基类对象

    /* class_protect.class */ /* 基类转换派生类问题:(不安全的转换) 既然转换了那就是指...

  • C++ - 派生类的构造函数

    派生类的构造函数 派生类对象包含基类 对象 执行派生类构造函数之前,先执行基类的构造函数 派生类交代基类初始化,具...

  • C++ 类继承

    C++类的继承要点: 派生类不能直接访问基类的私有成员变量,只能通过基类的公有或保护方法进行访问。 创建派生类对象...

  • 关于虚函数

    (1)派生类对象直接向基类赋值,赋值效果,基类数据成员和派生类中数据成员的值相同;(2)派生类对象可以初始化基类对...

  • 9.19

    当派生类与基类中有相同成员时: 若未强行指名,则通过派生类对象使用的是派生类中的同名成员。 如要通过派生类对象访问...

  • 4.5dynamic_cast操作符

    向上转型:指用派生类指针指向基类对象 向下转型:指将基类指针指向派生类对象 向下转型不会有任何问题,而向上转型默认...

网友评论

      本文标题:C++ 派生类对象转换成基类对象

      本文链接:https://www.haomeiwen.com/subject/srzdyctx.html