牛客网 http://www.nowcoder.com/test/question/done?tid=2198842&qid=14753#summary

本文深入分析了一段C++代码中类继承与虚函数使用的问题,指出类A的f()未声明为虚函数导致输出错误。解释了在类B中覆盖类A的f()函数时,正确使用虚函数的重要性,并通过实例说明了输出应为'B'而非'A'。文章还提到了析构函数未声明为虚函数可能导致的内存泄漏问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下面这段代码运行时会出现什么问题?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class A
{
public :
     void f()
     {
         printf( "A\n" );
     }
};
 
class B:  public A
{
public :
     virtual  void f()
     {
         printf( "B\n" );
     }
};
 
int main()
{
     A *a =  new B;
     a->f();
     delete a;
     return 0 ;
}
 
    

正确答案: B   你的答案: C (错误)

没有问题,输出B
不符合预期的输出A
程序不正确
以上答案都不正确

本题知识点

参考解析添加解析

  • 推荐
    墨儿头像

    墨儿

    答案:B

    基类A 的f()没有声明为虚函数,所以没有B覆盖。
    编辑于 2015-02-02 15:04:15 回复(1)
  • 更多回答(5条)
  • kindle1212xxcc头像

    kindle1212xxcc

    确实会输出A,但同时程序也会崩溃。
    因为delete a这一句会出错,a实际还是一个B类型,但是析构函数没有声明为虚函数,导致调用了A的默认析构函数,内存溢出了。
    发表于 2015-09-
<think>嗯,用户想用Python写一个爬虫来抓取知乎某个问题的所有回答。首先,我需要回忆一下知乎的API结构。记得以前知乎的接口可以通过修改URL参数来获取回答,比如在问题页面后面加上`/answers?include=...`之类的。可能需要用requests库发送GET请求,然后解析返回的JSON数据。 接下来要考虑请求头设置,通常需要设置User-Agent来模拟浏览器访问,否则可能被拒绝。另外,知乎可能需要登录才能查看全部回答,所以得处理cookies或者登录状态。用户提到要处理登录状态,可能需要使用session对象保持cookies,或者手动添加Authorization头,但具体怎么获取登录后的cookies呢?可能需要用户先手动登录,然后从浏览器中复制cookie字符串过来。 反爬机制方面,知乎可能有频率限制,所以需要设置请求间隔,比如用time.sleep()。另外,可能需要注意请求参数中的limit和offset,分页获取数据。记得之前的经验是,每个请求可以获取20条回答,通过调整offset参数来翻页,直到没有更多数据为止。 然后,解析部分,返回的数据是JSON格式,需要用json()方法解析,提取出回答内容。每个回答可能在data数组里,里面的content字段是HTML格式的文本,可能需要用BeautifulSoup进一步清理,或者直接保存原始内容。 还要处理异常,比如网络错误或者被封禁的情况,添加重试机制。可能用try-except块包裹请求代码,遇到异常时重试几次。 代码结构大概分为以下几个步骤: 1. 设置请求头和session,保持登录状态。 2. 循环发送请求,每次调整offset参数,直到获取所有回答。 3. 解析JSON数据,提取需要的信息。 4. 处理反爬,比如限速和随机等待时间。 5. 保存数据到文件,比如JSON或CSV。 不过,用户提供的引用里提到有的代码不带cookie也能抓取,可能现在知乎的接口限制不严?但为了保险起见,还是加上cookies或者用户代理比较稳妥。另外,引用3提到资料整理,可能用户需要更详细的代码解释,所以在回答里要注释清楚每个部分的作用。 还需要注意,知乎可能有动态生成的X-zse-96参数或者其他加密参数,但根据引用2,似乎之前没有带cookie也能抓取,可能现在还是可行的。可能需要实际测试一下当前的接口是否需要这些参数。如果不需要,那代码可以简化很多。 最后,保存数据的时候,要确保文件写入正确,避免重复或丢失数据。可能需要用json.dump()将数据逐条保存,或者使用pandas转换成DataFrame再输出。 总结下来,代码的大致框架是使用requests的session,设置headers,循环请求,解析数据,处理分页,保存结果。同时处理可能的反爬措施,如限速和伪装浏览器头。</think>我将分步骤说明如何用Python编写知乎回答爬虫程序,结合最新可用的接口实现: 1. **接口分析** 知乎问题回答接口已调整为: $$https://www.zhihu.com/api/v4/questions/{qid}/feeds?limit=20&offset=0$$ 通过修改`offset`参数实现分页[^2] 2. **完整代码实现** ```python import requests import time import json def get_zhihu_answers(qid): headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36", "x-zse-93": "101_3_3.0", "x-requested-with": "fetch", "x-api-version": "3.5.8" } session = requests.Session() answers = [] offset = 0 while True: url = f"https://www.zhihu.com/api/v4/questions/{qid}/feeds?limit=20&offset={offset}" try: response = session.get(url, headers=headers) data = response.json() if "data" not in data: break answers.extend(data["data"]) if data["paging"]["is_end"]: break offset += 20 time.sleep(2 + random.random()) # 随机延时防封禁 except Exception as e: print(f"请求异常:{e}") break # 保存数据 with open(f"zhihu_{qid}.json", "w", encoding="utf-8") as f: json.dump(answers, f, ensure_ascii=False) return answers # 使用示例 if __name__ == "__main__": qid = "382029543" # 从URL中提取的问题ID result = get_zhihu_answers(qid) print(f"共获取到{len(result)}条回答") ``` 3. **关键配置说明** - 请求头需包含新版反爬校验字段`x-zse-93` - 使用随机延时(2-3秒)规避频率限制[^2] - 问题ID直接从URL中截取数字部分 - 数据包含回答内容、点赞数、作者信息等完整字段 4. **登录状态处理** 如需获取完整内容,需添加Cookie: ```python headers["Cookie"] = "你的知乎登录Cookie" ``` 获取Cookie方法: 1. 浏览器登录知乎后打开开发者工具(F12) 2. 任意请求的Headers中复制Cookie值 5. **数据解析示例** ```python for answer in answers: content = answer["target"]["content"] author = answer["target"]["author"]["name"] voteup = answer["target"]["voteup_count"] print(f"作者:{author},点赞:{voteup}") # 使用BeautifulSoup解析HTML内容 # soup = BeautifulSoup(content, 'html.parser') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值