c++的构造函数
来源:互联网 发布:淘宝妈妈模特是谁 编辑:程序博客网 时间:2024/06/10 18:54
1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。
2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。
3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。
4. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。
5. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法)。
6. 如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式,比如:
针对第六点 自己的例子
#include<iostream>
#include<string>
class Animal{
public:
std::string name;
Animal(std::string name);
~Animal();
};
class Turtle:public Animal{
public :
Turtle(std::string name);
~Turtle();
};
Animal::Animal(std::string name){
this->name=name;
std::cout<<"进入基类的有参构造函数"<<std::endl;
}
Animal::~Animal(){
std::cout<<"进入基类析构函数"<<std::endl;
}
Turtle::Turtle(std::string Name):Animal(Name){
std::cout<<"进入子类有一个参数的构造函数"<<std::endl;
}
Turtle::~Turtle(){
std::cout<<"进入子类的析构函数"<<std::endl;
}
int main(){
Turtle turtle("小甲鱼");
std::cout<<turtle.name<<std::endl;
return 0;
}
运行结果:
进入基类的有参构造函数
进入子类有一个参数的构造函数
小甲鱼
进入子类的析构函数
进入基类析构函数
针对第二和第五点 实例:
#include<iostream>#include<string>
class Animal{
public:
std::string name;
Animal();
Animal(std::string name);
~Animal();
};
class Turtle:public Animal{
public :
int age;
Turtle(std::string name); //定义了两个构造函数
Turtle(std::string name,int age);
~Turtle();
};
Animal::Animal(){
std::cout<<"进入基类的无参构造函数"<<std::endl;
}
Animal::Animal(std::string name){
this->name=name;
std::cout<<"进入基类的有参构造函数"<<std::endl;
}
Animal::~Animal(){
std::cout<<"进入基类析构函数"<<std::endl;
}
Turtle::Turtle(std::string Name):Animal(Name){
std::cout<<"进入子类有一个参数的构造函数"<<std::endl;
}
Turtle::Turtle(std::string name,int age){
this->name=name;
this->age=age;
std::cout<<"进入子类有两个参数的构造函数"<<std::endl;
}
Turtle::~Turtle(){
std::cout<<"进入子类的析构函数"<<std::endl;
}
int main(){
Turtle turtle("小甲鱼",20);
std::cout<<turtle.name<<" "<<turtle.age<<std::endl;
return 0;
}
运行结果:
进入基类的无参构造函数
进入子类有两个参数的构造函数
小甲鱼 20
进入子类的析构函数
进入基类析构函数
在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错。
如上例中Turtle类中定义的带两个参数的构造函数 如果父类的无参构造函数被注释掉,则程序会报错。
因此父类需要定义不带参数的构造函数,子类才能定义与父类参数不一致的构造方法。
- [C++]子类的构造函数
- [c++]类的构造函数
- C++-类的构造函数
- 【C/C++】构造函数的初始化列表
- <C++>14.构造函数的重载与拷贝构造函数
- C#-构造函数要注意的
- C 类对象的拷贝构造函数
- [C++] 拷贝构造函数的调用
- C++/CLI的静态构造函数
- (C++)定义类的拷贝构造函数
- 【C++&Java】构造函数的调用点
- C++, 类的构造函数 语法练习
- [C++] C++的拷贝构造函数浅析
- 【C++】c++类的构造函数详解
- 【C++】拷贝构造函数的剖析
- 【c++】构造函数调用顺序的研究
- C++:复制构造函数的应用
- c++/string的构造析构函数
- 读取设备节点/sys/class/XX :Android java.io.FileNotFoundException: open failed: EACCES (Permission denied)
- 什么是启发式算法
- DNS 解析流程
- Win10 安装 SQL Server 2008 R2
- java线程之BlockingQueue的用法
- c++的构造函数
- Basler工业相机基于opencv 采集图像
- warning C4819 解决方案 warning C4819: The file contains a character that cannot be represented in the cu
- 字符界面_RHEL 安装VMTools
- from表单使用ajax异步提交
- Linux Mint下ODBC连接mysql
- 为什么90%的人物画像都是没用的?
- 讯飞语音sdk集成语音合成功能超级完美工具类
- NYOJ1253 第七届acm省赛 F Turing equation