关于C++子类在继承父类的构造函数时的一些情况
来源:互联网 发布:我老婆是网络女主播 编辑:程序博客网 时间:2024/05/24 01:45
1.子类没有定义构造方法,则调用父类的无参构造方法
#include<iostream>#include<string>//如果子类没有定义构造方法,则调用父类的无参构造方法class BaseClass{public: BaseClass(); BaseClass(std::string theName); void dosomething();private: std::string Name;};BaseClass::BaseClass(){ BaseClass::Name = "koudan" ; std::cout << "此时调用父类的无参构造函数\n" << std::endl;}BaseClass::BaseClass(std::string theName){ BaseClass::Name = theName; std::cout << "此时调用父类的有参构造函数\n" <<std::endl;}void BaseClass::dosomething(){ std::cout << "执成员函数void dosomething() \n" << std::endl;}class SubClass: public BaseClass{};int main(){ SubClass subclass; subclass.dosomething(); return 0;}
2.如果子类定义了构造方法,不论是无参数的还是带参数的,在创建子类对象的时候,首先执行父类的无参构造方法,然后执行自己的构造方法。
#include<iostream>#include<string>//如果子类定义了构造方法,不论是无参数的还是带参数的,在创建子类对象的时候,首先执行父类的无参构造方法,然后执行自己的构造方法。class BaseClass{public: BaseClass(); BaseClass(std::string theName); void dosomething(); std::string Name;};BaseClass::BaseClass(){ BaseClass::Name = "koudan" ; std::cout << "此时调用父类的无参构造函数\n" << std::endl;}BaseClass::BaseClass(std::string theName){ BaseClass::Name = theName; std::cout << "此时调用父类的有参构造函数\n" <<std::endl;}void BaseClass::dosomething(){ std::cout << BaseClass::Name << "\n" << std::endl; std::cout << "执成员函数void dosomething() \n" << std::endl;}class SubClass: public BaseClass{public: SubClass(); SubClass(std::string theName);};SubClass::SubClass(){ SubClass::Name = "LiuJiaYu";}SubClass::SubClass(std::string theName){ SubClass::Name = theName;}int main(){ std::cout << "实例化子类对象,调用无参构造函数:\n" <<std::endl; SubClass subclass; subclass.dosomething(); std::cout << "实例化子类对象,调用有参构造函数:\n" <<std::endl; SubClass subclass1("subclass"); subclass1.dosomething(); return 0;}
3.在创建子类对象的时候,如果子类的构造函数没有显示的调用父类的构造函数,则会调用父类的默认无参构造函数。
此处父类的默认无参构造函数是当用户没有定义的时候,编译器默认生成的构造函数。
4.在创建子类对象时,如果子类的构造函数没有显示调用父类的构造函数,自己提供了无参构造函数,则会调用父类自己的无参构造函数。
函数实现同第二种。
5.在创建子类对象时,如果子类的构造函数没有显示的调用父类的构造函数只定义了自己的有参构造函数,则会出错。(如果父类只有有参构造方法,则子类必须显示的调用此有参构造方法)
#include<iostream>#include<string>class A{public: A(std::string theName); void dosomething();protected: std::string Name;};A::A(std::string theName){ std::cout << "父类的有参构造函数" << std::endl ; A::Name = theName;}void A::dosomething(){ std::cout << A::Name << std::endl;}class B: public A{public: B(std::string theName);};//子类显示地调用父类的有参构造函数B::B(std::string theName):A(theName){ std::cout << "子类显示的调用父类的有参构造函数" << std::endl;}int main(){ B b("son"); std::cout << "有参构造函数:" << std::endl ; b.dosomething();}
0 0
- 关于C++子类在继承父类的构造函数时的一些情况
- 关于子类继承父类的构造函数用法
- 在C 中子类继承和调用父类的构造函数方法
- 关于PHP中构造函数以及子类继承父类构造函数的相关问题
- A 子类继承父类,子类的构造函数会覆盖父类的构造函数
- 子类继承父类,那么子类实例化时对象调用的是父类还是子类的构造函数?
- C++类继承:子类调用父类的构造函数
- 子类继承父类的构造函数(方法)吗?
- 子类继承父类的构造函数(方法)吗?
- 继承(子类与父类构造函数的关系)
- 子类继承父类,构造函数的特点 super()
- JAVA 子类不能继承父类的构造函数
- 继承-父类子类构造函数的运行顺序
- 在C++中子类继承和调用父类的构造函数方法
- 在C++中子类继承和调用父类的构造函数方法
- 在C++中子类继承和调用父类的构造函数方法
- 在C++中子类继承和调用父类的构造函数方法
- 在C++中子类继承和调用父类的构造函数方法
- 赫夫曼树-c语言实现
- (重点)为一个新用户在Oracle中创建新数据库步骤 2012-10-25 10:27:02
- 52.Oracle数据库SQL开发之 子查询——编写嵌套子查询
- 机智的偶数求和
- UVa 10935 Throwing cards away I【队列模拟】
- 关于C++子类在继承父类的构造函数时的一些情况
- 详解Android中AsyncTask的使用
- 53.Oracle数据库SQL开发之 子查询——编写包含子查询的UPDATE和DELETE
- 【Server】弱网络下的游戏服务器设计 (二)
- android studio的初级介绍
- swift 快速奔跑的兔几 本节的内容是:音频与视频 第一说 AVFoundation 以及简单的iOS视频app
- 《动态规划》hdoj acm 3.2.5 求质数
- 54.Oracle数据库SQL开发之 高级查询——使用集合操作符
- [kuangbin带你飞]专题一 简单搜索 K - 迷宫问题 POJ 3984