C++ 如何讲隐藏的函数释放出来

如果有一个基类:

class Dog
{
public:
	virtual ~Dog() {}
	void show(int a)
	{
		cout << "我是一只狗!" << a << "岁" << '\n';
	}
	void mysong()
	{
		cout << "哈哈哈..." << '\n';
	}
private:
	void mylang()
	{
		cout << "汪汪汪..." << '\n';
	}
};

私有继承不能隐式转换

如果私有继承它:

// 骚狗
class Sg :private Dog
{
public:
};

在用户端使用,如下使用会报错:

//Dog *sd = new Sg; // 这样是不行的,私有继承都不能访问,然后自动就不行了。

共有继承,可以用 using 将隐藏的声明释放出来


// 哮天犬
class Xtq :public Dog
{
public:
	void show(int a, double b)
	{
		cout << "继承类中的,a 和 b:" << a << " " << b << '\n';
	}
	using Dog::show;   // 只需要函数名,不需要像声明函数一样带上返回值类型
	//using Dog::mylang;  // 这个不行,他本身在基类中不可访问。
};

// 大拖
class Dt :private Dog
{
public:
	using Dog::mysong;
};

外部用户就可以正常的访问到:

Dog *d = new Xtq;
d->show(1);
Xtq *x = dynamic_cast<Xtq *>(d);
x->show(1, 2);
x->show(11);

Dt dt;
dt.mysong();

上面就能正常访问。

posted @ 2025-01-21 14:43  double64  阅读(19)  评论(0)    收藏  举报