+ 1
Non static memeber function with class name
#include <iostream> using namespace std; class Base { public: void f() { cout << "Base\n"; } }; class Derived : public Base { public: void f() { cout<<"Derived\n"; } }; int main() { Derived obj; obj.Base::f(); return 0; } Can we call function with class name or like function call f?
8 odpowiedzi
+ 2
Ipang basically everthing in c++ has a second more verbose name that can be used to clarify stuff for the compiler. the difference between static and non static is that static things have do called as Class::member() and non static stuff has to be called via an object
as obj.Class::member() (or shorthand obj.member()) where object is an object of type Class. if you have something like int a;
void f(){ int a = 1;
::a=0;
cout << a;
}
which outputs 0 the same principle applies(but the first qualifier is the global scope)
+ 23
You can use a static method if you don't want to instantiate an object.
static void f()
Base::f();
for non static u have to create instance..
I like object ...
advantages of having an object instance means you can create more than one instance of the same class with different data.
check out this code 👇
https://code.sololearn.com/cfwqRqhLslvU/?ref=app
+ 23
Ipang U can
just edit my code u will get
Derived ob;
ob.Super::f();
+ 5
Max, 🌛DT🌜 can any of you please explain to me this, why the f() was called obj.Base::f() as I see it the f() were not declared with static access modifier, I thought the scope resolution was used for static members, need clarification : )
And also the following pairs seem to output similar result, when do we prefer to choose one over the other?
// Base instance
obj.Base::f(); // output: Base
obj.f(); // output: Base
// Derived instance
ob.Derived::f();// output: Derived
ob.f(); // output: Derived
+ 5
Max , 🌛DT🌜
Big Thanks guys, both of you, always a new thing to learn a day. Ketan Lalcheta I hope it's okay that I asked them here, I have no intention to hijack the thread, but the question was interesting, so Big Thanks for you to bring it up too : )
+ 4
Max Big Thanks mate, learned something new today, can I ask you something else please, in case the Base class is extending another class (e.g. Super) is it also possible for a Derived instance to call obj.Super::f() or is it strictly one level up in hierarchy (only obj.Base::f()).
Hope I don't bother you much : )
+ 1
you are accessing the function normaly but the functions of the class you inherit from just have the name Base::f() in your class. the concept you are looking for is called qualified-id
+ 1
Ipang https://code.sololearn.com/cSFY70Dz93Sq/?ref=app but as always what you can access depends on if you inherit public protected or private