<学习笔记>类和对象 构造对象调用过程

本文探讨了C++中派生类构造的步骤,包括基类和成员对象的构造,以及在基类无默认构造函数时的处理方式。
摘要由CSDN通过智能技术生成

当派生类包含基类成员 调用过程
看题

#include <iostream>
using namespace std;
class Base
{	private:
		int Y;
	public:
		Base(int y=0) {Y=y;cout<<"Base("<<Y<<") \n";}
		~Base() {cout<<"~Base()\n";}
		void print() {cout<<Y<<" ";}
};
class Derived:public Base
{
	private:
		Base b;
		int Z;

	public:
		Derived (int y, int z):Base(y)
		{Z=z;
		cout<<"Derived("<<y<<","<<z<<")\n"; 
		}
		~Derived() {cout<<" ~Derived()\n";}
		void print()
		{
		Base::print();
		cout<<Z<<endl;
		}
};
int main()
{
	Derived d(10,20);
	d.print();
}

初始化派生类对象B

1.初始化基类A   Base(10)
2.初始化B成员基类b   Base(0)
3.执行构造函数体Derived(10,20)

#include<iostream>
using namespace std; 
class A
{
public:
	A(int i=10){x=i;cout<<"A:"<<x<<endl;}
	int x;
};
class B:public A
{
public:
	//B(int i,int j):A(i),a(j){x=i;cout<<"B:"<<x<<", "<<A::x<<endl;}
	B(int i):a(i){x=i;cout<<"B:"<<x<<", "<<A::x<<endl;}
private:
	A a;
	int x;
};
int main()
{
B b(5);
}

 

初始化派生类对象B

1.初始化基类A   A:10
2.初始化B成员基类a   A:5
3.执行构造函数体B:5,10

总结

构造顺序:
基类构造→派生类的成员对象构造→派生类构造

 

报错

 编译器在尝试构造类 A 的一个对象时,没有找到合适的默认构造函数(不接受任何参数的构造函数)。这个报错告诉我们,定义派生类要么基类有默认构造函数,要么在派生类里需要显式初始化,比如下面这个也报错。

  1. 基类没有默认构造函数
    如果基类没有默认构造函数,但是提供了带参数的构造函数,那么派生类必须在其初始化列表中显式调用基类的带参数构造函数。(比如第一题)在这种情况下,派生类可以没有默认构造函数,只要确保每次创建派生类对象时都提供正确的初始化参数。

修改显式调用

 

上强度看看你能不能读懂

首先构造积累这里是B中显示构造 A5

成员对象构造A6

B的构造函数B5,5 

今天你博学了吗?

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值