Although the class files are generally considered 'core' files, there is a way to override them using the auto_loader system, which does have an override capability.
Take your modified shopping_cart class file for example.
Make a copy of includes/auto_loaders/config.core.php and save it into the includes/auto_loaders/overrides/ folder.
Now edit that new copy, and replace this code
Code:
$autoLoadConfig[0][] = array('autoType'=>'class',
'loadFile'=>'shopping_cart.php');
with this
Code:
$autoLoadConfig[0][] = array('autoType'=>'class',
'loadFile'=>'my_shopping_cart.php');
When you edit the file includes/classes/shopping_cart.php, save the edited file as includes/classes/my_shopping_cart.php and voila! you are now using an 'override' copy that won't get overwritten during an upgrade.
I have used this technique for various class files that I've had reason to modify.