继承的构造函数

在C++11新标准中,派生类能够重用其直接基类的构造函数

#include <iostream>
using namespace std;

struct Base
{
    Base() { cout << "construct" << endl; }
};
struct Derived : public Base
{
    using Base::Base; //继承Base的构造函数
};

int main()
{
    Derived d;
    return 0;
}

一个构造函数的声明不会改变该函数的访问级别

#include <iostream>
using namespace std;

struct Base
{
    Base() { cout << "construct" << endl; }
};
struct Derived : public Base
{
   private://不会改变继承的构造函数的访问级别,仍然是publiic
     using Base::Base;
};

int main()
{
    Derived d;
    return 0;
}

当一个基类的构造函数含有默认实参,这些实参并不会被继承。相反,派生类将获得多个继承的构造函数

#include <iostream>
using namespace std;

struct Base
{
    Base(int x=1) { cout << "construct" <<x<< endl; }
};
struct Derived : public Base
{
    //实际上继承了2个构造函数
     using Base::Base;
};

int main()
{
    Derived d;
    Derived d1(2);
    return 0;
}

如果派生类定义的构造函数与基类的构造函数有相同的参数列表,该构造函数不会被继承

#include <iostream>
using namespace std;

struct Base
{
    Base() { cout << "construct" << endl; }
    Base(int) { cout << "construct int" << endl; }
};
struct Derived : public Base
{

    using Base::Base;
    //不会继承Base的默认构造函数
    Derived() { cout << "Derived class construct" << endl; };
};

int main()
{
    Derived d;
    Derived d(1);
    return 0;
}

原文地址:https://www.cnblogs.com/lkpp/p/cpp-derived-construct.html

时间: 2024-10-21 19:21:30

继承的构造函数的相关文章

C++构造函数 &amp; 拷贝构造函数 &amp; 派生类的构造函数 &amp; 虚继承的构造函数

构造函数 ,是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载.(摘自百度百科构造函数). 一.最基本的构造函数 1 class Base 2 { 3 public: 4 Base(int var) : m_Var(var) 5 { 6 } 7 private: 8 int m_Var; 9 }; 以上构造函数的执行过程:

java构造函数使用方法总结 (继承与构造函数)

使用构造器时需要记住: 1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名) 2.每个类可以有一个以上的构造器 3.构造器可以有0个.1个或1个以上的参数 4.构造器没有返回值 5.构造器总是伴随着new操作一起调用 示例: A.java Java代码 public class A{ public A(){ System.out.println("调用了无参的构造函数"); } public A(String mess){ System.out.println

C++ Primer 学习笔记_31_面向对象编程(2)--继承(二):继承与构造函数、派生类到基类的转换 、基类到派生类的转换

C++ Primer 学习笔记_31_面向对象编程(2)--继承(二):继承与构造函数.派生类到基类的转换 .基类到派生类的转换 一.不能自动继承的成员函数 构造函数 拷贝构造函数 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化调用基类构造函数完成(如果没有给出则默认调用默认构造函数). 派生类的构造函数需要给基类的构造函数传递参数 #include <iostream

236 子构造函数继承父构造函数中的属性

先定义一个父构造函数 再定义一个子构造函数 子构造函数继承父构造函数的属性(使用call方法) <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <

多重继承,虚继承,MI继承中虚继承中构造函数的调用情况

先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: [cpp] view plain copy print? //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; } ~base()

PHP面向对象之类的继承与构造函数

在我们是用来的继承时,总会在实例化对象的时候会问道,在我实例化对象的时候我是利用的自己的构造函数进行的实例,还是利用的父类的构造函数进行的实例化. 下面我们就来探讨一下这个问题. 1.如果父类有构造函数,子类没有构造函数,那么在子类实例化时确实会执行父类的构造函数. 看一个例子: <?php class Employee { private $name; function __construct($nname) { $this->name = $nname; } function setNam

JavaScript学习笔记(散)——继承、构造函数super

构造函数中的super 今天看<JavaScript设计模式与开发实践>时,在书中看到一段代码出现super语句,第一次看到这个关键字,所以上网查了下它的作用,发现这个关键字是来自java,来源不深究,说说它的用途.super主要作用是调用父级的构造函数,但是困惑的是既然是构造函数,说明在声明的时候已经调用了,为什么会出现super来调用?自己敲了段代码加深了理解,上图: 这里创建了一个animal类,包含一个构造函数 接下来创建animal的子类Dog,含有一个speak函数(用于理解继承)

JAVA的继承,构造函数,窗体

1 import java.awt.*; 2 import javax.swing.*; 3 import javax.swing.JFrame; 4 import java.awt.event.WindowListener; 5 import java.awt.event.WindowEvent; 6 import java.awt.event.WindowAdapter; 7 import java.awt.event.ActionListener; 8 import java.awt.ev

JS继承,原型继承,构造函数的继承,非构造函数&quot;的继承

a.原型继承 一.new运算符的缺点 用构造函数生成实例对象,有一个缺点,那就是无法共享属性和方法.比如,在DOG对象的构造函数中,设置一个实例对象的共有属性species. function DOG(name){ this.name = name; this.species = '犬科'; } 然后,生成两个实例对象: var dogA = new DOG('大毛'); var dogB = new DOG('二毛'); 这两个对象的species属性是独立的,修改其中一个,不会影响到另一个.