The TTL on a CNAME is about caching the canonical name, not the IP address.
Example with CNAME:
Client ask the authoritive nameserver for example.com about bar.example.com. and get back a CNAME to foo.example.com. with a TTL of 2 days. The client store this in his resolver cache.
Client then goes to ask about foo.example.com. and get back a A record for 203.0.113.3, with a TTL of 2 hours.
Client cache looks like this: "bar.example.com. CNAME foo.example.com." that expires in 2 days, and "foo.example.com. A 203.0.113.3" that expires in 2 hours.
If the domain foo.example.com. changes its A record, it will be reflected in 2 hours for clients who uses bar.example.com.
Example with ALIAS:
Client ask the authoritive nameserver for example.com about bar.example.com. and get back A record to 203.0.113.3 with a TTL of 2 days.
Client resolve cache will be a single entry of: "bar.example.com. A 203.0.113.3" that expires in 2 days.
If the foo.example.com. changes IP address, its TTL is not considered by clients who uses bar.example.com., because its not in their cache.