还是不太理解继承中的构造函数 再问一下
时间:2011-12-12
来源:互联网
class Base
{
public:
Base(int i)
{}
};
class Dervice:public Base
{
public:
Dervice():Base(10){}//这个地方 是子类的初始化列表 这里写"Base(10)" 不就是对基类构造函数的调用吗?既然是对基类构造函数的调用 是否就说明了子类中继承了基类的构造函数呢?
};
{
public:
Base(int i)
{}
};
class Dervice:public Base
{
public:
Dervice():Base(10){}//这个地方 是子类的初始化列表 这里写"Base(10)" 不就是对基类构造函数的调用吗?既然是对基类构造函数的调用 是否就说明了子类中继承了基类的构造函数呢?
};
作者: daihenan 发布时间: 2011-12-12
不一定啊。
参数不同的形成多态,根据参数确定执行那个构造函数;
参数相同的,先判断是否是虚函数,仔细看看定义吧
参数不同的形成多态,根据参数确定执行那个构造函数;
参数相同的,先判断是否是虚函数,仔细看看定义吧
作者: jubobo 发布时间: 2011-12-12
基类的构造函数是不能被派生类继承的。另外你派生类构造函数写的不对
Dervice(i):Base(10)
基类的构造函数带参数的话,派生类构造函数也一定要带参数
Dervice(i):Base(10)
基类的构造函数带参数的话,派生类构造函数也一定要带参数
作者: wjl19890711 发布时间: 2011-12-12
C/C++ code
测试发现
初始化列表中调用构造函数和在函数体内部调用构造函数是有区别的,对于构造函数的调用编译器确实做了手脚,插入了代码,你直接调用反而出错,编译器只允许在初始化列表里调用
operater = 操作确实是被继承了,你可以正常的去调用,只是被隐藏了,析构函数和构造函数是一样的不再做分析
哥为这个派生类对象模型的问题研究了整整三天,这是最终结论,看楼下怎么说!
#include <iostream> using namespace std; class base { public: base(int i):num(i){} base(const base &orig):num(orig.num){} base& operator = (const base &orig) { num = orig.num; return *this; } private: int num; }; class derived:public base { public: derived(int a,int b):base(a),id(b) { //base::base(a);//或者换成base(a);<<---- base::base(a);测试是否被继承并应藏,base(a);测试是否被继承没有隐藏,结果全部编译错误 //id = b; } derived(const derived &orig):base(orig),id(orig.id) { //base::base(orig);//或者换成base(orig);<<-----同上,结果全部编译错误 //id = orig.id; } derived& operator = (const derived &orig) { base::operator = (orig);//<<--------通过,说明这个被继承但被隐藏 id = orig.id; return *this; } private: int id; }; int main() { return 0; }
测试发现
初始化列表中调用构造函数和在函数体内部调用构造函数是有区别的,对于构造函数的调用编译器确实做了手脚,插入了代码,你直接调用反而出错,编译器只允许在初始化列表里调用
operater = 操作确实是被继承了,你可以正常的去调用,只是被隐藏了,析构函数和构造函数是一样的不再做分析
哥为这个派生类对象模型的问题研究了整整三天,这是最终结论,看楼下怎么说!
作者: qscool1987 发布时间: 2011-12-12
引用 3 楼 qscool1987 的回复:
C/C++ code
#include <iostream>
using namespace std;
class base
{
public:
base(int i):num(i){}
base(const base &orig):num(orig.num){}
base& operator = (const base &a……
C/C++ code
#include <iostream>
using namespace std;
class base
{
public:
base(int i):num(i){}
base(const base &orig):num(orig.num){}
base& operator = (const base &a……
兄弟 你这个研究结果很有说服力呀 三天整出来 也够累的了 但 derived(int a,int b):base(a),id(b)
这样写不就是对base构造函数的调用么??
作者: daihenan 发布时间: 2011-12-12
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28