object oriented programing became popular in the 60's.
https://en.wikipedia.org/wiki/Object-oriented_programming
in the early 80s, there were two projects to bring classes, inhertance and polymorphism to C. Both languages want to pure supersets of C. so in both cases new syntax symbols were added.
- objective-c: designed by Brad Cox mostly influenced by smalltalk, it added smalltak style classes and inheritance, Use used smalltalk syntax to send messages to object, [obj message], and @ prefix.
- c++: designed by Bjarne Stroustrup, mostly influenced by simula-67. simula used the dot notation to access object properties and virtual methods. C++ implemented polymorphism without runtime binding (v-tables instead). the lack of runtime binding has led to much of the complexity of C++ requiring templates, etc.
in C++, to allow polymorphism, two classes can define the same method name. to distinguish which Class method your code is referring to the syntax <classname>::<method name> is used. when namespaces were added, this was generalized to scoping.