The word override can be interpreted in several ways, so I may be mistaking something, but your problem seems to be caused by your List in CardsView.
										NavigationLink(destination: CardFullView(cname: cardsInfo.newCard.cname, name: cardsInfo.newCard.name, id: cardsInfo.newCard.id)) {
												CardRow(cname: cardsInfo.newCard.cname, name: cardsInfo.newCard.name, id: cardsInfo.newCard.id)
										}
You use ForEach for cardsInfo.cards, receiving each card in card. But your CardRow always shows cardsInfo.newCard ignoring each card.
So, every row in your List shows always the only CardInfo kept in cardsInfo.newCard.
You may need to have an Array of CardInfo in your CardsInfo, and show it in your CardsView:
CardsInfo
struct CardInfo: Identifiable { //<- Needs `Identifiable` to use with `ForEach`
		var name: String = ""
		var id: String = ""
		var cname: String = ""
}
class CardsInfo: ObservableObject {
		@Published var newCard: CardInfo = CardInfo()
		@Published var cards: [CardInfo] = [] //<- Make this an Array of `CardInfo`, not of `Card`
		
		func add() {
				cards.append(newCard) //<- Add `newCard` to `cards`
		}
}
CardsView:
		var body: some View {
				NavigationView {
						List {
								Text("\(sheetInfo.showSheetView.description)")
								ForEach(cardsInfo.cards) { card in
										NavigationLink(destination: CardFullView(cname: card.cname, name: card.name, id: card.id)) { //<-
												CardRow(cname: card.cname, name: card.name, id: card.id) //<-
										}
								}
								.onDelete(perform: onDelete)
								.onMove(perform: onMove)
						}
						//...
				}
		}
If this change causes something wrong, please try to explain that showing -- Steps to reproduce
What you expect
What you actually get