当前位置: 首页 > news >正文

我的世界的家怎么做视频网站百度网站首页

我的世界的家怎么做视频网站,百度网站首页,阜宁做网站哪家最好,郑州外贸网站制作问题代码&#xff1a; 首先看一段代码&#xff1a;很简单&#xff0c;就是BBB继承自AAA&#xff0c;然后BBB重写定义了同名属性&#xff0c;然后调用父类AAA的打印函数&#xff1a; #include <iostream> using namespace std;class AAA { public:AAA() {}~AAA() {}void …

问题代码:

        首先看一段代码:很简单,就是BBB继承自AAA,然后BBB重写定义了同名属性,然后调用父类AAA的打印函数:

#include <iostream>
using namespace std;class AAA {
public:AAA() {}~AAA() {}void func() {YourVar = 20;}void print() {cout << "YourVar: " << YourVar << endl;}public:int YourVar = 10;};class BBB : public AAA {
public:BBB() {YourVar = 20;}~BBB() {}void print1() {cout << "YourVar: " << YourVar << endl;}void YourMethodOrFunction() {}private:int YourVar;
};int main() {BBB b;b.print();//b.print1();cout << "********" << endl;return 0;
}

打印结果:

        会发现,明明我构造函数里面将YourVar的值改为了20,但是还是打印的10.

        这个问题,属于C++的基础问题,我记得,子类继承父类,如果子类中,定义了同名属性的话,那么父类的属性会被隐藏,访问子类的那个属性,就是子类的,不会是父类的。

        但是如果父类里面,有一个打印的函数print,会发现,这个print函数,生效的范围,只有父类,不包括子类。只有将父类的print函数重写,才能生效在子类中:

解决思路1:重写print

#include <iostream>
using namespace std;class AAA {
public:AAA() {}~AAA() {}void func() {YourVar = 20;}void print() {cout << "YourVar: " << YourVar << endl;}public:int YourVar = 10;};class BBB : public AAA {
public:BBB() {YourVar = 20;}~BBB() {}void print() {cout << "YourVar: " << YourVar << endl;}void YourMethodOrFunction() {}private:int YourVar;
};int main() {BBB b;b.print();cout << "********" << endl;return 0;
}

打印结果:

虽然解决了问题,但是明明我父类中,写了print函数,干嘛还重新写一次?还有意义?

解决思路2:去掉子类的同名属性

#include <iostream>
using namespace std;class AAA {
public:AAA() {}~AAA() {}void func() {YourVar = 20;}void print() {cout << "YourVar: " << YourVar << endl;}public:int YourVar = 10;};class BBB : public AAA {
public:BBB() {YourVar = 20;}~BBB() {}//private:
//	int YourVar;
};int main() {BBB b;b.print();cout << "********" << endl;return 0;
}

但是有时候,我们就是要这么重写,那么该怎么办呢?

解决思路3:将父类地址传递给子类

#include <iostream>
using namespace std;class AAA {
public:AAA() {YourVar = new int;*YourVar = 10;}~AAA() {delete YourVar;}void print() {cout << "YourVar: " << *YourVar << endl;}protected:int *YourVar;
};class BBB : public AAA {
public:BBB() {// 将父类地址传递给子类YourVar = AAA::YourVar;*YourVar = 20;}~BBB() {}private:int *YourVar;
};int main() {BBB b;b.print();cout << "********" << endl;return 0;
}

解决思路4:将子类地址传递给父类:

#include <iostream>
using namespace std;class AAA {
public:AAA() {// YourVar = new int;// *YourVar = 10;}~AAA() {delete YourVar;}void print() {cout << "YourVar: " << *YourVar << endl;}protected:int *YourVar;
};class BBB : public AAA {
public:BBB() {YourVar = new int;// 将子类地址传递给父类AAA::YourVar = YourVar;*YourVar = 20;}~BBB() {}private:int *YourVar;
};int main() {BBB b;b.print();cout << "********" << endl;return 0;
}

总结

1. 面对这样的情况,要么就不要写同名属性(但有时候不能保证自己忘记了)

2. 当以后继承的类层次很多的时候,难免会定义同名属性,但是父类的函数,是不会访问子类的同名属性的,这个是这个问题的关键。虽然在子类中,父类的属性确实是隐藏了,但隐藏不代表消失,也不代表父类的函数中,也将这个属性给隐藏或者替换了。

3. 要么就使用指针,将父类和子类的地址变成一样的地址。

4. 虽然最后一种比较麻烦,但是会惊奇的发现,如果是指针的话,可以实现父类中实现所有操作,子类只管创建对象和使用,子类如果想改实现,根据需要同名替代即可。甚至属性也可以写成函数指针那些,是一种非常灵活的使用方式,是一种上层设计模式的简单体现。

#include <iostream>
using namespace std;class AAA {
public:AAA() {// YourVar = new int;// *YourVar = 10;}~AAA() {delete YourVar;}void print() {cout << "YourVar: " << *YourVar << endl;}protected:int *YourVar;
};class BBB : public AAA {
public:BBB() {YourVar = new int;// 将子类地址传递给父类AAA::YourVar = YourVar;*YourVar = 20;}~BBB() {}void print() {cout << "*********************" << endl;cout << "YourVar: " << *YourVar << endl;cout << "*********************" << endl;}private:int *YourVar;
};int main() {BBB b;b.print();return 0;
}

http://www.ds6.com.cn/news/109500.html

相关文章:

  • 人员调动在网站上怎么做seo是什么职位
  • 做软件项目需不需要有网站南京seo公司教程
  • 网站后台要怎么做网站免费推广平台
  • 如何做的网站手机可以用济南网站优化公司排名
  • 兰州优化公司哪个好娄底地seo
  • 外贸联系网站114啦网址导航官网
  • 深圳专业网站制作平台seo外链发布工具
  • 网站优化效果查询媒体:北京不再公布疫情数据
  • 山东省建设工程信息网站跨境电商有哪些平台
  • 电子创意设计网站百度快照优化排名怎么做
  • 哪里有网站建设流程百度搜索排名规则
  • 毕设做网站需要发布到浏览器吗免费的网站软件
  • 合山市网站seo是什么意思啊
  • 为什么做不了自己的网站公司搭建网站
  • 网站设计手机版为什么那么多背景优化关键词的方法包括
  • 深圳网站关键词优化排名百度灰色关键词代发
  • 黑龙江建设厅网站官网1688seo优化是什么
  • 厦门旅游网站软文写手
  • 专做动漫av的网站搜索引擎优化工具
  • 网站建设伍金手指下拉6网络营销专业代码
  • 网站建设开发费入什么科目百度一下你就知道百度官网
  • 专业企业网站建设报价nba今日数据
  • 怎么做网站外链宁波seo排名外包公司
  • 做网站的背景像素北京网站建设
  • 做企鹅号的视频素材网站产品设计
  • 客户网站留言郑州网站建设七彩科技
  • php+mysql动态网站开发太原seo公司
  • 小程序开发平台哪个公司的好seo 深圳
  • 织梦教育网站模板软文营销文章300字
  • 网站开发出来有后台么济南seo网站优化公司