一道题

定义基类Base,有两个共有成员函数fn1()、fn2(),私有派生出Derived类,如果想在Derived类的对象中使用基类函数fn1(),应怎么办?
我的代码:

#include<iostream>
using namespace std;

class Base
{
public:
    Base(){}
    ~Base(){}
    void fn1();
    void fn2();
};

void Base::fn1()
{
    cout << "Base fn1 is used." << endl;
}

void Base::fn2()
{
     cout << "Base fn2 is used." << endl;
}

class Derived :public Base
{
public:
    Derived(){}
    ~Derived(){}
};

int main()
{
    Derived n;
    n.fn1();
    n.fn2();
    return 0;
}

教程的代码:

#include <iostream>
using namespace std;

class Base
{
public:
    int fn1() const { cout << "Base fn1 is used." << endl; return 1; }
    int fn2() const { cout << "Base fn2 is used." << endl; return 2; }
};

class Derived : private Base
{
public:
    int fn1() { cout << "Derived fn1 is used." << endl; return **Base::fn1();** };
    int fn2() { cout << "Derived fn2 is used." << endl; return **Base::fn2();** };
};

int main()
{
    Derived derive;
    derive.fn1();
    derive.fn2();
    return 0;
}

不是很明白加粗地方的想法。

好的!下面是一道新的 **C++ 递归算法目**,适合巩固对递归和分治思想的理解。 --- ## 🧩目:求解斐波那契数列的第 n 项(递归实现) ### 目描述: 斐波那契数列定义如下: - F(0) = 0 - F(1) = 1 - F(n) = F(n - 1) + F(n - 2), 当 n ≥ 2 请使用**递归算法**编写一个函数 `fibonacci(int n)` 来计算斐波那契数列的第 `n` 项。 ### 示例输入输: | 输入 | 输 | |------|------| | 0 | 0 | | 1 | 1 | | 5 | 5 | | 7 | 13 | --- ### ✅ 解思路: 这是一道经典的递归入门。虽然递归版本效率不高(存在大量重复计算),但非常适合理解递归的基本结构: - 基本情况(base case): - 如果 `n == 0`,返回 0; - 如果 `n == 1`,返回 1; - 递归情况(recursive case): - 返回 `fibonacci(n - 1) + fibonacci(n - 2)` --- ### 💻 C++ 实现代码如下: ```cpp #include <iostream> using namespace std; // 递归函数:计算斐波那契数列第 n 项 int fibonacci(int n) { // 基本情况 if (n == 0) return 0; if (n == 1) return 1; // 递归调用 return fibonacci(n - 1) + fibonacci(n - 2); } // 主函数测试样例 int main() { int n; cout << "请输入一个整数 n(n >= 0): "; cin >> n; if (n < 0) { cout << "输入无效,请输入非负整数!" << endl; } else { cout << "斐波那契数列第 " << n << " 项是:" << fibonacci(n) << endl; } return 0; } ``` --- ### 🔍代码解释: - 函数 `fibonacci` 使用了两个递归调用来完成任务; - 每次递归都在将问规模缩小; - 最终通过 base case 终止递归; - 在主函数中,程序读取用户输入并输对应的结果。 --- ### ❗注意: 递归方式虽然直观,但时间复杂度为 **O(2^n)**,效率非常低。对于较大的 `n`(如 `n > 30`),运行速度会明显变慢。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值