探索更好的方法:访问基类的私有成员
修改程序,我是加了两个函数,想知道有没有更好的修改方法
修改前:
#include <iostream.h>
class base
{
private:
int n1;
protected:
int k1;
public:
base(){n1=0;k1=1;}
void fun1(){cout<<n1<<k1<<endl;}
};
class d1:public base
{
private:
int n2;
protected:
int k2;
public:
d1(){n2=10;k1=11;}
void fun2(){cout<<n1<<k1<<endl; cout<<n2<<k2<<endl;}//
};
class d2:public d1
{
private:
int n3;
protected:
int k3;
public:
d2(){n3=20;k3=21;}
void fun3(){cout<<n1<<k1<<endl;cout<<n2<<k2<<endl; cout<<n3<<k3<<endl;}
};
void main()
{
base baseobj;
d1 d1obj;
d2 d2obj;
baseobj.fun1();
d1obj.fun2();
d2obj.fun3();
}
修改后:
#include <iostream.h>
class base
{
private:
int n1;
protected:
int k1;
public:
base(){n1=0;k1=1;}
int get_n1(){return n1;}
void fun1(){cout<<"class base:"<<endl;
cout<<"n1="<<n1<<","<<"k1="<<k1<<endl;}
};
class d1:public base
{
private:
int n2;
protected:
int k2;
public:
d1(){n2=10;k2=11;}
int get_n2(){return n2;}
void fun2(){cout<<"class d1:"<<endl;
cout<<"n1="<<base::get_n1()<<","<<"k1="<<k1<<endl;
cout<<"n2="<<n2<<","<<"k2="<<k2<<endl;}
};
class d2:public d1
{
private:
int n3;
protected:
int k3;
public:
d2(){n3=20;k3=21;}
void fun3(){cout<<"class d2:"<<endl;
cout<<"n1="<<base::get_n1()<<","<<"k1="<<k1<<endl;
cout<<"n2="<<d1::get_n2()<<","<<"k2="<<k2<<endl;
cout<<"n3="<<n3<<","<<"k3="<<k3<<endl;}
};
void main()
{
base baseobj;
d1 d1obj;
d2 d2obj;
baseobj.fun1();
d1obj.fun2();
d2obj.fun3();
}
修改前:
#include <iostream.h>
class base
{
private:
int n1;
protected:
int k1;
public:
base(){n1=0;k1=1;}
void fun1(){cout<<n1<<k1<<endl;}
};
class d1:public base
{
private:
int n2;
protected:
int k2;
public:
d1(){n2=10;k1=11;}
void fun2(){cout<<n1<<k1<<endl; cout<<n2<<k2<<endl;}//
};
class d2:public d1
{
private:
int n3;
protected:
int k3;
public:
d2(){n3=20;k3=21;}
void fun3(){cout<<n1<<k1<<endl;cout<<n2<<k2<<endl; cout<<n3<<k3<<endl;}
};
void main()
{
base baseobj;
d1 d1obj;
d2 d2obj;
baseobj.fun1();
d1obj.fun2();
d2obj.fun3();
}
修改后:
#include <iostream.h>
class base
{
private:
int n1;
protected:
int k1;
public:
base(){n1=0;k1=1;}
int get_n1(){return n1;}
void fun1(){cout<<"class base:"<<endl;
cout<<"n1="<<n1<<","<<"k1="<<k1<<endl;}
};
class d1:public base
{
private:
int n2;
protected:
int k2;
public:
d1(){n2=10;k2=11;}
int get_n2(){return n2;}
void fun2(){cout<<"class d1:"<<endl;
cout<<"n1="<<base::get_n1()<<","<<"k1="<<k1<<endl;
cout<<"n2="<<n2<<","<<"k2="<<k2<<endl;}
};
class d2:public d1
{
private:
int n3;
protected:
int k3;
public:
d2(){n3=20;k3=21;}
void fun3(){cout<<"class d2:"<<endl;
cout<<"n1="<<base::get_n1()<<","<<"k1="<<k1<<endl;
cout<<"n2="<<d1::get_n2()<<","<<"k2="<<k2<<endl;
cout<<"n3="<<n3<<","<<"k3="<<k3<<endl;}
};
void main()
{
base baseobj;
d1 d1obj;
d2 d2obj;
baseobj.fun1();
d1obj.fun2();
d2obj.fun3();
}
...全文
相关推荐
C++程序_类的继承与派生_
派生类可以访问基类的公有和保护成员,但不能直接访问私有成员。**派生类的多态性**是通过虚函数实现的。虚函数允许子类重写基类的方法,并且在运行时动态绑定到正确的函数实现。
外部访问类的私有成员+修改虚表
**多态性与虚函数:**虚函数是实现多态的关键,它允许一个基类指针或引用调用派生类重写的方法。
Java反射机制修改私有成员变量的实现_Reflection
在Java中,反射机制主要用于以下几种情况:动态加载类、访问私有成员、运行时检查类型以及调用私有方法等。
从外部访问易语言类的私有成员源码-易语言
在提供的"类的私有成员实现从外部访问.e"文件中,可能包含了具体的示例代码,演示了上述的一种或多种方法。分析并理解这段代码可以帮助你更好地掌握如何在易语言中实现此类操作。
C#子类对基类方法的继承、重写与隐藏详解
: Person{}```在这个例子中,子类Employee自动继承了基类Person的Greeting方法。


