c++ 子类调用父类有参构造函数
2016-11-16 17:29
337 查看
(1)多态性
在C++或者Java中,多态性其中一个好处是减少代码量。子类越多,越明显。
(2)构造函数的调用
FatherClass *pt = new ChildClass;
父类指针-->子类实例 , 首先调用父类构造函数,然后调用子类构造函数。
(3)如果子类构造函数无参数,一切都好办。但是,往往子类构造函数需要参数。那么应该怎么办呢?
可以这么写:子类构造函数名(子类总参数列表):父类构造函数名(参数列表)
(4)代码示例:
(5)调用顺序
a.如果子类没有显示调用父类含参数的构造函数,那么在子类实例化过程中,
---顺序: 父类无参(默认)构造函数-->子类被调用的构造函数。
b.如果子类显示调用了父类的含参构造函数,那么在子类实例化过程中,
---顺序: 父类有参构造函数-->子类被调用的构造函数。
经典代码例子如下:
输出结果:
一句一句分析:
B c;
//首先调用A的无参(默认)构造函数,然后调用B的无参构造函数。
//所以先输出A(void),然后是B(void)
B b(8);
//首先调用A的有参构造函数,然后调用B的有参构造函数。
//所以先输出A 8,然后是B
如果,没有显示调用A的有参构造函数呢?
答案是:不会调用A的有参构造函数,只会调用A的无参(默认)构造函数。如下图:
========================
在C++或者Java中,多态性其中一个好处是减少代码量。子类越多,越明显。
(2)构造函数的调用
FatherClass *pt = new ChildClass;
父类指针-->子类实例 , 首先调用父类构造函数,然后调用子类构造函数。
(3)如果子类构造函数无参数,一切都好办。但是,往往子类构造函数需要参数。那么应该怎么办呢?
可以这么写:子类构造函数名(子类总参数列表):父类构造函数名(参数列表)
(4)代码示例:
class Student { public: Student(char nam) { name = nam; } ~Student(){} protected: string name; } class Student1:public Student{ public : Student1(string nam, int num):Student(nam) { age = num; } ~Student1(){} protected: int age; }
(5)调用顺序
a.如果子类没有显示调用父类含参数的构造函数,那么在子类实例化过程中,
---顺序: 父类无参(默认)构造函数-->子类被调用的构造函数。
b.如果子类显示调用了父类的含参构造函数,那么在子类实例化过程中,
---顺序: 父类有参构造函数-->子类被调用的构造函数。
经典代码例子如下:
class A { public: A() { printf("A(void) \n"); } A(int d) { printf("A %d\n", d); } ~A() { printf(" ~A \n"); } }; class B : public A { public: B(){ printf("B(void) \n"); } B(int x) : A(x) { printf("B \n"); } ~B() { printf("~B \n"); } }; int main(int argc, char* argv[]) { B c; B b(8); // 此处也自动调用了A的同签名的构造函数 printf("Hello World!\n"); getchar(); return 0; }
输出结果:
一句一句分析:
B c;
//首先调用A的无参(默认)构造函数,然后调用B的无参构造函数。
//所以先输出A(void),然后是B(void)
B b(8);
//首先调用A的有参构造函数,然后调用B的有参构造函数。
//所以先输出A 8,然后是B
如果,没有显示调用A的有参构造函数呢?
答案是:不会调用A的有参构造函数,只会调用A的无参(默认)构造函数。如下图:
========================
相关文章推荐
- 小朋友学C++(10):子类构造函数调用父类构造函数
- c++ 子类调用父类有参构造函数
- C++子类如何调用父类构造函数
- C++和JAVA中一些区别,包括指向子类的引用会调用谁的方法,子类构造函数自动调用父类构造函数时,父构造会调用的谁方法
- C++子类显示调用父类的构造函数
- C++子类显示调用父类的构造函数
- c++ 子类要正确的调用父类构造函数
- C++析构函数的自动调用(析构函数必须是虚拟的,这样删除父类指针指向的子类对象,才能同时调用两者的析构函数,否则就没有机会调用子类析构函数)
- 父类和子类中对于构造函数的调用问题
- PHP 子类是否会自动调用父类的构造函数
- 在子类中调用父类的带参数的构造函数
- 子类虚函数C++ 继承中子类与父类虚函数入栈顺序 及父类私有虚函数的调用方式
- C++中子类调用父类的有参构造函数
- [C++]父类与子类的静态成员变量、实例成员变量、构造函数的执行顺序
- 子类继承父类,那么子类实例化时对象调用的是父类还是子类的构造函数?
- C++ 子类继承父类 之 构造函数
- C++中子类如何调用不同父类中的同名函数?
- C++ 子类B重载父类A的方法funA后,在父类A中调用funA会调用子类B还是父类A的funA方法?
- 子类中调用父类的带参数的构造函数|子类构造函数调用父类构造函数 的说明
- Python 子类调用父类的构造函数