C++ supports both procedure-oriented and object-oriented programming. Procedure-oriented programming focuses on functions and divides programs into functions, while object-oriented programming focuses on data, divides programs into objects that encapsulate data and functions, and allows for data hiding, inheritance, polymorphism and dynamic binding. Some key differences are that procedure-oriented programming uses top-down design and does not secure data, while object-oriented programming uses bottom-up design, secures data within objects, and better models real-world problems.