类被继承后方法属性变化
private继承------------->属性变化:父类public以及protected改为private
public继承------------->属性变化:父类public以及protected不发生改变
protected继承------------->属性变化:父类public以及protected变为protected
public:公有继承-------------
(1)
1、派生类的对象只能访问基类中的公有成员;
2、派生类的成员函数可以访问基类中的公有成员和保护成员。
#include <QtCore/QCoreApplication>
#include <QDebug>
class A
{
public:
A(){}
A(const QString a,const QString b,const QString c):
pubAttr(a),
priAttr(b),
proAttr(c)
{}
QString pubAttr;
void show()
{
qDebug() << pubAttr <<" "<< priAttr << " "<<proAttr;
}
private:
QString priAttr;
void print()
{
qDebug() << pubAttr <<" "<< priAttr << " "<<proAttr;
}
protected:
QString proAttr;
void dis()
{
qDebug() << pubAttr <<" "<< priAttr << " "<<proAttr;
}
};
//公有继承
class B : public A
{
public:
B(){}
B(QString a,QString b,QString c,QString d,QString e,QString f):
A(a,b,c),
pubBttr(d),
priBttr(e),
proBttr(f)
{
}
//输出基类A中的公共成员以及保护成员
void showAttr()
{
qDebug()<< pubAttr << proAttr /*<< priAttr */; //(基类中的私有成员不可见)
A::show(); //基类的公共成员对于子类是可见的
dis(); //基类的受保护成员对于子类是可见的
//print(); //基类的私有成员对于子类是不可见的
}
void show()
{
qDebug() << pubBttr <<" "<< priBttr << " "<<proBttr;
}
QString pubBttr;
private:
QString priBttr;
protected:
QString proBttr;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//-----------------------------公有继承
//---------------对象对于类成员访问限制
//构造A的对象
A attr("Hello","Class","World");
attr.show();
//说明:普通类对于其类的对象:
//公有成员对于对象是可见的;私有成员以及保护成员是不可见的(不能访问)
//attr.print(); //私有的成员对于对象是(不可见的)不能访问
//attr.dis(); //受保护的成员对于对象是(不可见的)不能访问
qDebug() << attr.pubAttr << endl;
//qDebug() << attr.proAttr << endl; //受保护的成员对于对象是(不可见的)不能访问
//qDebug() << attr.priAttr << endl; //私有的成员对于对象是(不可见的)不能访问
//---------------子类对于基类属性的访问控制
//构建B对象
B bttr("Hello","Class","World","pub","pri","pro");
//调用B中的方法
qDebug() <<"-------------------";
bttr.showAttr();
qDebug() <<"-------------------";
//派生类的对象只能访问基类中的公有成员-------------------
bttr.A::show(); //基类的公共成员对于子类的对象是可见的
//bttr.A::print(); //基类的私有成员对于子类的对象是不可见的
//bttr.A::dis(); //基类的保护成员对于子类的对象也是不可见的
return a.exec();
}