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;	
}

 

posted on 2025-04-27 15:56  轩~邈  阅读(18)  评论(0)    收藏  举报