CPP类成员函数访问权限2

mac2022-06-30  33

// main.cpp // OOL // Created by mac on 2019/4/4. // Copyright © 2019年 mac. All rights reserved. // 1.在一个类中如果直接把成员函数权限声明成protected或者是private是无法直接被生成的本类对象访问的. // 2.如果想要访问被protected或者private保护的函数,那么可以在本类的public修饰符下生成新函数,调用那两种函数就可以了。 // 3.BaseClass称为基类或者超类 Derived1成为子类或派生类 // 4.类class的前面是否需要添加访问修饰符,对类本身,对类生成的对象,对继承类,对成员函数,对成员变量都有什么影响 // 5.从基类中的protected权限下继承的g()函数,可以在子类中在public权限下进行g()重写。 // 6.从基类中private权限下继承的h()函数,可以在子类中的public权限下进行h()函数的重写。 // 7.在生成继承类的时候 public virtual 继承是什么意思? // 8.在生成继承类的时候,子类的public修饰符下的成员函数可以调用基类的protected修饰符下的函数,但是无法调用继承来的privated修饰符下的函数 // 9.在生成派生类的时候 如果是以protected的形式来进行继承的话,那么基类的所有公有、受保护成员在派生类中都会变成受保护的成员。 // 10.对于私有形式的继承,基类的公有成员和受保护的成员在派生类中都变成了私有成员。 // 11.在所有的继承类型中,基类的私有成员都不能在派生类中访问。 // 12.基类的受保护成员只能在派生类中访问,而不能在非派生类中进行访问。这个非派生类除了指类这种东西本身外,还指其他的东西。我觉得这样说还不是很完整,因为基类的受保护成员,在基类定义的内部也是可以被调用的。而非单指的是派生类。 // 13.类的前面添加virtual是为了继承类防止冗余的现象。但是具体的用法还是不清楚。 #include <iostream> using namespace std; class BaseClass{ public: BaseClass(){ } void f(){ cout<<"f()in BaseClass"<<endl; } //1.在基类中重新定义函数进行调用,从而打破访问修饰符的限制。 //2.或者在子类中的public修饰符下重写这个函数。 void c(){ g(); h(); } protected: void g(){ cout<<"g()in BaseClass"<<endl; } private: void h(){ cout<<"h()in BaseClass"<<endl; } }; //继承基类 class Derived1 : public virtual BaseClass{ public: //在继承类中重写f()函数 void f(){ g(); //h(); } protected: private: }; int main(int argc, const char * argv[]) { BaseClass bc; bc.c(); Derived1 d1; //d1.g(); //d1.h(); d1.f();//输出的是继承类的f()函数 d1.BaseClass::f();//输出的基类的f()函数 return 0; }

Tips

类class的构造函数的前面必须添加public,要不没法生成对象。不加public,默认就是private。注意结构体struct的构造函数前面不加public,也能正常生成对象。每个对象都可以通过指针this来访问自己的地址,所以*this就是指的对象本身。在写析构函数的时候注意区分~的英文或者中文状态,否则编译无法通过。

转载于:https://www.cnblogs.com/overlows/p/10656437.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)