erros: PHP Fatal error: Uncaught TypeError: Argument 1 passed to Titular::__construct() must be of the type string, object given
\banco.php(6): Titular->__construct(Object(Cpf), 'Carlos')
Arquivo de ExecuçaoBanco.php
<?php
require 'src/Conta.php';
require 'src/Titular.php';
require 'src/Cpf.php';
$cpf1 = new Cpf("11111111111");
$carlos = new Titular("Carlos",$cpf1);
$conta1 = new Conta($carlos);
$cpf2 = new Cpf("22222222222");
$patricia = new Titular("patricia",$cpf2);
$conta2 = new Conta($patricia);
echo $conta1->mostrarNome().PHP_EOL;
echo $conta1->mostrarCpf().PHP_EOL;
Classe Conta.php
<?php
class Conta
{
    public string $Titular;
    private float $saldo = 0;
    private static int $numerodeContas = 0;
    public function __construct(Titular $titular)
    {
        $this->titular = $titular;
        $this->saldo = 0;
        self::$numerodeContas++;
    }
    public function __destruct()
    {
        if (self::$numerodeContas > 1) {
            echo "Mais de uma conta ativa";
        }
        Self::$numerodeContas--;
    }
    public function sacar(float $valorAsacar): void
    {
        if ($valorAsacar > $this->saldo) {
            echo "Você não tem Saldo suficiente pra Sacar";
            return;
        }
        $this->saldo -= $valorAsacar;
    }
    public function depositar(float $valorAdepositar): void
    {
        if ($valorAdepositar > 0) {
            $this->saldo += $valorAdepositar;
            return;
        }
        echo "Você só pode fazer depósitos de valores positivo";
    }
    public function trans(float $valorAtransferir, $contaDestino): void
    {
        if ($valorAtransferir > $this->saldo) {
            echo "voce nao tem saldo suficiente pra transferir";
            return;
        }
        $this->saldo -= $valorAtransferir;
        $contaDestino->depositar($valorAtransferir);
    }
    public function saldo(): float
    {
        return $this->saldo;
    }
    public function mostrarCpf()
    {
        return $this->titular->getCpf();
    }
    public function mostrarNome(): string
    {
        return $this->titular->getNome();
    }
    public static function mostrarContas()
    {
        return Conta::$numerodeContas;
    }
}
Classe Titular.php
<?php
class Titular
{
    private Cpf $cpf;
    private string $nome;
    public function __construct(String $nome, Cpf $cpf)
    {
        $this->validaNome($nome);
        $this->nome = $nome;
        $this->cpf = $cpf;
    }
    public function getNome()
    {
        return $this->nome;
    }
    private function validaNome(String $nomeTitular)
    {
        if (strlen($nomeTitular) < 5) {
            echo "Seu nome precisa no minimo ter 5 caracteres";
            exit();
        }
    }
    public function mostrarTudo()
    {
        echo "$this->nome" . PHP_EOL;
        echo "$this->cpf" . PHP_EOL;
    }
}
Classe Cpf.php
<?php
class Cpf
{
    private $numero;
    public function __construct(String $numero)
    {
        //$this->validarCpf($cpf);
        $this->numero = $numero;
    }
    public function getCpf()
    {
        return $this->numero;
    }
    /*public function validarCpf($cpf) : void
    {
        if(strlen($cpf)!=11){
           echo "Cpf invalido";
           exit();
        }
    }*/
}