C++ 继承与派生
继承与派生代码示例
class people{
public:
int m-age;
char m-name[10];
void setage(int age);
void setname(char *name);
protected:
int money;
};
void setage(int age){m-age=age};
void setname(char *name){m-name=name};
class student:public people{
public:
int m-score;
void setscore(int score);
protected:
int paiming;
};
void setscore(int score){m-score=score};
这里有一个还算完整的类的定义。 people是基类,student是派生类; 或者叫父类或子类。 继承成员可以通过子类对象访问,简单来说就是无需中转,可以直接访问基类的数据成员或是函数成员
三类继承方式
第一:public 基类中所有 public 成员在派生类中为 public 属性; 基类中所有 protected 成员在派生类中为 protected 属性; 基类中所有 private 成员在派生类中不能使用。 *就是仅能使用基类中的public数据和函数成员,protected成员的使用需要其他中转方式。
第二:protected 基类中所有的public 成员在派生类中为 protected 属性; 基类中所有的protected成员在派生类中为protected 属性; 基类中的所有 private 成员在派生类中不能使用。
第二:private 基类中所有的public 成员在派生类中为 private 属性; 基类中所有的protected成员在派生类中为private 属性; 基类中的所有 private 成员在派生类中不能使用。
特点:继承方式的权限是最高的权限,高于继承方式权限时需要降级,低于继承方式权限时则不需要另作改变。当然private成员继承之后并不是说就不存在了,它仅仅是不可见了,仍能通过基类对其进行访问,仍要占据内存。
PS:继承关系是相对复杂的一种关系,一般在使用中我们常用public继承,这样不会改变太多继承关系,protected和private两种会是继承关系变得更加麻烦。
函数遮蔽问题
class people{
public:
int m-age;
char m-name[10];
void setage(int age);
void setname(char *name);
protected:
int money;
};
void setage(int age){m-age=age};
void setname(char *name){m-name=name};
class student:public people{
public:
int m-score;
void setscore(int score);
void setage();
protected:
int paiming;
};
void setscore(int score){m-score=score};
在派生类中如有与基类中函数相同函数名的函数,无论参数是否相同,都会产生这种效果,直接访问该函数,只能访问到派生类中该函数。由于即使参数不同也遮蔽,因此是不构成重载的。 类似上面的例子,改动前访问student:setage函数是访问基类中的函数,但是改动后就是访问student中的同名函数了。
|