cppPrimer学习19th
19.3#
Copy
已知存在如下的类继承体系,其中每个类分别定义了一个公有的默认构造函数和一个析构函数:
class A { };
class B : public A { };
class C : public B { };
class D : public B, public A { };
下面哪个 dynamic_cast 将失败?
(a) A *pa = new C;
B *pb = dynamic_cast <B*>(pa); ok
(b) B *pb = new B;
C *pc = dynamic_cast <C*>(pb); 错误,内存本身就是基类的
(c) A *pa = new D; D里面有两个A,无法转换
B *pb = dynamic_cast <B*>(pa);
19.4#
Copy
使用上一个练习定义的类改写下面的代码,将表达式*pa 转换成类型C&:
if (C *pc = dynamic_cast<C*>(pa))
{
pc-> ....
} else {
pa-> ...
}
A *pa = new C;
..接下去就正常使用了
19.5#
Copy
在什么情况下你应该用 dynamic_cast 替代虚函数?
基类的指针,但是实际内存是子类的,并且没有虚函数
19.6#
Copy
编写一条表达式将 Query_base 指针动态转换为 AndQuery 指针。
分别使用 AndQuery 的对象以及其他类型的对象测试转换是否有效。
打印一条表示类型转换是否成功的信息,确保实际输出的结果与期望的一致
https://blog.csdn.net/shamozhizhoutx/article/details/90490237
19.8#
Copy
if(typeid (*pa1 ) == typeid(*pa2 ))
19.9#
Copy
19.10#
Copy
#include <iostream>
#include <typeinfo>
using namespace std;
class A
{
};
class B : public A
{
};
class C : public B
{
};
int main (int argc, char const *argv[])
{
{
A *pa = new C;
cout << typeid (pa).name () << endl;
}
{
C cobj;
A &ra = cobj;
cout << typeid (&ra).name () << endl;
}
{
B *px = new B;
A &ra = *px;
cout << typeid (ra).name () << endl;
}
while (1 )
;
return 0 ;
}
19.11#
Copy
普通的数据指针和指向数据成员的指针有何区别?
普通的数据指针指向对象
成员指针指向非静态类成员,初始化指针是只是指向成员,在使用时指定对象,
同时定义时需要 提供类名 classname::*pt
19.12#
Copy
定义一个成员指针,令其可以指向 Screen 类的 cursor 成员。通过该指针获得 Screen::cursor 的值。
pos cursor = 0 ;
public :
Screen::pos Screen::*getpos (){
return &Screen::cursor;
}
main
{
Screen myScreen (2 , 2 , 'c' ) ;
const Screen::pos Screen::*pcursor = Screen::pcursor ();
auto i = myScreen.*pcursor;
}
19.14#
Copy
下面的代码合法吗?如果合法,代码的含义是什么?如果不合法,解释原因。
auto pmf = &Screen ::get_cursor;
pmf = &Screen ::get;
19.15#
Copy
普通函数指针和指向成员函数的指针有何区别?
1. 在成员函数和指向该成员的指针之间不存在自动转换规则 函数名不能直接赋值,要使用 &classname::fun ;
2. 使用的时候才指定具体对象
19.16#
Copy
声明一个类型别名,令其作为指向 Sales_data 的 avg_price 成员的指针的同义词。
using AvgPrice = double (Sales_data ::*)() const ;
AvgPrice avgprice = &Sales_data ::avg_price;
19.17#
Copy
为 Screen 的所有成员函数类型各定义一个类型别名。
略 https://blog.csdn.net/shamozhizhoutx/article/details/90490237
19.18#
Copy
编写一个函数,使用 count_if 统计在给定的 vector 中有多少个空 string 。
std: :function <bool (const std::string &)> fcn = &std::string ::empty;
std: :count_if(vs.begin(), vs.end (), fcn)
Tudo 嵌套类 联合体 内部类#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?