Relation between C++ and Blueprints

I don’t quite get the relation between those two object when they are seperated. So here’s what I know:

In C++ your create your class with everything you want other people to overwrite in Blueprints. So in my case, I created an AAssaultRifle class with the projectile set to: EditDefaultOnly, so that a designer could assign the projectile when he’s done designing it.

So the designer go in the editor, create a blueprint from my class AAssaultRifle and assign some mesh tothe projectile in the blueprint

After that, I decide that the player should spawn with an AAssaultRifle when the game begin. So in his Weapons array, I had a AAssaultRifle, but is the blueprint attach to it? What is the relation between those two object? Because to me, they now seems like they evolve seperatly. It seems like I shouldn’t add an AAssaultRifle to my weapon array, but an AAssaultRifleBlueprint or something.

Because otherwise, when I start the game, the player fire, it goes to my OnFire method in my AAssaultRifle class, and breaks out because he say there’s no projectile set. So they must not be connected.

If someone could help me or point me towards the ressources it would be awesome. But I did my research before coming here and I haven’t found the one explaining the relationship between them except of BlueprintNativeEvent who suggest that the connection is existing because if the person overwrite the function in the blueprint than the blueprint execute, if not, the C++ is suppose to be executed. I’m pretty sure the connection exist, but I can’t make it work.

As you see, I’m pretty confused. If anyone could help me, that would be great!

Thanks a whole lot!