1、父类的public、private和protected成员在子类中的访问权限
| 继承方式 | 成员类型 | 子类中的访问权限 | |
| public 公有继承 | public成员 | 子类内可以直接访问 | 子类外对象可以直接访问 |
| private成员 | 子类内不能直接访问 | 子类外对象不能直接访问 | |
| protected成员 | 子类内可以直接访问 | 子类外对象不能直接访问 | |
| private 私有继承 | public成员 | 子类内可以直接访问 | 子类外对象不能直接访问 |
| private成员 | 子类内不能直接访问 | 子类外对象不能直接访问 | |
| protected成员 | 子类内可以直接访问 | 子类外对象不能直接访问 | |
| protected保护继承 | public成员 | 子类内可以直接访问 | 子类外对象不能直接访问 |
| private成员 | 子类内不能直接访问 | 子类外对象不能直接访问 | |
| protected成员 | 子类内可以直接访问 | 子类外对象不能直接访问 | |
虽然子类无法直接访问父类的private成员,但可以通过父类提供的public或protected成员函数间接访问这些private成员。
class Parent
{
private:
void privateFunc()
{
cout << "Parent private function" << endl;
}
public:
void publicFunc() {
privateFunc(); // 父类的public函数可以调用private函数
}
};
class Child : public Parent
{
public:
void childFunc()
{
publicFunc(); // 子类可以通过父类的public接口间接访问private成员
}
};
2、子类覆盖父类的成员函数
#include <iostream>
#include <string.h>
using namespace std;
/* 定义父类 */
class CEmployee
{
public:
void OutputName()
{
cout << "父类CEmployee的成员函数OutputName" << endl;
}
};
/* 子类Operator公有继承CEmployee */
class COperator : public CEmployee
{
public:
void OutputName()
{
cout << "子类COperator的成员函数OutputName" << endl;
}
};
/* 主程序 */
int main(int argc, char *argv[])
{
COperator O1;
O1.OutputName();
return 0;
}
输出
xuanmiao@linux:~/Test/C++$ ./test6
子类COperator的成员函数OutputName
3、可以定义父类指针,通过子类构造函数创建对象;但是不能定义子类指针,通过父类构造函数创建对象
#include <iostream>
using namespace std;
// 父类
class Parent
{
public:
Parent()
{
cout << "Parent constructor called" << endl;
}
virtual ~Parent()
{
cout << "Parent destructor called" << endl;
}
virtual void display()
{
cout << "Parent display" << endl;
}
};
// 子类
class Child : public Parent
{
public:
Child()
{
cout << "Child constructor called" << endl;
}
~Child()
{
cout << "Child destructor called" << endl;
}
void display() override
{
cout << "Child display" << endl;
}
};
int main()
{
// 通过父类指针创建子类对象
Parent* ptr = new Child();
// 调用子类的成员函数
ptr->display();
// 释放内存
delete ptr;
return 0;
}
4、多重继承:水鸟类 继承 鱼类和鸟类
#include <iostream>
using namespace std;
class CBird
{
public:
void fly()
{
cout << "bird can fly" << endl;
}
void breath()
{
cout << "bird can breath" << endl;
}
};
class CFish
{
public:
void swim()
{
cout << "fish can swim" << endl;
}
void breath()
{
cout << "fish can breath" << endl;
}
};
class CWaterBird: public CBird, public CFish
{
public:
void action()
{
cout << "waterbird can fly and swim"<< endl;
}
};
int main(int argc, char *argv[])
{
cout << endl <<"调用父类各自的成员函数:" << endl;
CWaterBird waterbird;
waterbird.fly();
waterbird.swim();
waterbird.action();
cout << endl <<"调用父类重复的成员函数:" << endl;
waterbird.CBird::breath(); // 调用bird类的Breatha成员函数
waterbird.CFish::breath(); // 调用fish类的Breatha成员函数
cout << endl;
return 0;
}
public、private和protected
浙公网安备 33010602011771号