C++继承学习笔记
来源:互联网 发布:ftp连接阿里云 编辑:程序博客网 时间:2024/05/18 08:52
派生类从基类继承了保护(protected)成员和公有(public)成员函数,但是继承不了基类的重载构造函数。
定义一个如下基类:
class Counter
{
//private:
// int count;
protected:
int num,count;
public:
Counter();
Counter(int var);
~Counter();
void operator ++ (){ count++; num++;}
Counter operator + (Counter N);
void Reset(){ count=0;num=0; }
int GetCount(){return count;}
int Getnum() {return num;}
};
Counter Counter::operator + (Counter N)
{
Counter X;
X.count=count+N.count;
return X;
}
Counter::Counter()
{
count=0;num=0;
cout<<"/n A new 0 Counter class is be created;";
}
Counter::Counter(int var)
{
count=var;
num=var;
cout<<"/n A new SET Counter class is be created;";
}
Counter::~Counter()
{
cout<<"/n This Counter 我 Class's job is done!There has no job to do !";
}
从基类派生一个类:
class NewCounter:public Counter
{
public:
void operator --();
};
void NewCounter::operator --()
{
num--;
// count--;
}
主程序定义如下几个对象:
int main(int main(int argc, char *argv[])
{
Counter MyCount,YourCount(1),HisCount;
NewCounter MyNewCounter(5);
}
当我尝试用5来初始化MyNewCounter时,编译器报错。此时回忆起构造函数的定义:构造函数必须与类同名,系统允许重载构造函数。
在上个派生类对象MyNewCounter声明中我未定义构造函数NewCounter(int var);所以无法初始化这个对象。
首先修改程序如下:
int main(int main(int argc, char *argv[])
{
Counter MyCount,YourCount(1),HisCount;
NewCounter MyNewCounter;
}
编译通过!
通过设置断点,发现生成对象MyNewCounter前会先调用基类的默认构造函数Counter::Counter(),通过构造函数将num,count初始化为0值;
为了达到将派生类对象初始化成自己想要的结果,我尝试修改派生类声明定义如下:
class NewCounter:public Counter
{
public:
NewCounter();
void operator --();
};
NewCounter::NewCounter()
{
num=1;count=1;
cout<<"/n A new 1 NewCounter class is be created;";
}
主程序不变!
通过编译运行,发现对象MyNewCounter在生成时先调用一次基类的构造函数Counter,接着才调用派生类的构造函数NewCounter();
且如愿将num,和count初始化为1。
接着,再为派生类NewCounter增加一个重载构造函数如下:
NewCounter::NewCounter(int var)
{
num=var;
count=var;
}
修改主程序如下:
int main(int main(int argc, char *argv[])
{
Counter MyCount,YourCount(1),HisCount;
NewCounter MyNewCounter(5);
}
编译调试结果:
程序成功生成一个初始化为5的对象,仍然是先调用基类的构造函数,再调用派生类的重载构造函数。
学习心得体会:在派生类生成对象时想要使用重载的构造函数初始化对象的话,必须要在派生类中重新定义重载的构造函数。
- 学习笔记(objective-c)-继承
- Object-C学习笔记三-----继承
- Objective-C学习笔记第四章继承
- 【C++】【学习笔记】【028】多继承
- 【C++】【学习笔记】【029】虚继承
- Objective-C学习笔记九:继承一
- Objective-C学习笔记十:继承二
- 【学习笔记】C++primer plus 13.继承
- 【笔记-C++】 继承
- Objective-C学习笔记---类别(实现多重继承的方法)
- Objective-C学习笔记---类别(实现多重继承的方法)
- Object-C 学习笔记(八)---面相对象(继承)
- Object-c基础编程学习笔记-继承,复合
- 【C++】【学习笔记】【016】this指针和类的继承
- Objective-C 学习笔记 04 - 继承和对象的实例
- 黑马程序员 — Objective-C学习笔记(二):继承
- (C/C++学习笔记)多继承的二义性
- OBJ-C类的继承和派生学习笔记
- 编写存储过程常用技巧汇总
- 程序的装入和链接
- Web容器的编码问题
- 树状显示二叉树
- Web容器的编码问题
- C++继承学习笔记
- Web容器的编码问题
- visual studio 2008下装CGAL
- visual studio 2008下装CGAL
- 索引中丢失in或out参数:1
- 嵌入式Linux系统中使用cramfs文件系统
- 字节数字和十六进制的转化
- 五分钟公司(开心农场)的网站架构 -- 数据库性能优化
- 学习OpenCV的三种境界