cppPrimer学习19th

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)) { //使用C的成员 pc->.... } else { //使用A的成员 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; //A类型指针 P1A cout << typeid(pa).name() << endl; } { C cobj; A &ra = cobj; cout << typeid(&ra).name() << endl; //A类型指针 P1A } { B *px = new B; A &ra = *px; cout << typeid(ra).name() << endl; // A类型 1A } 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 中有多少个空 stringstd::function<bool (const std::string&)> fcn = &std::string::empty; std::count_if(vs.begin(), vs.end(), fcn)

Tudo 嵌套类 联合体 内部类#

posted @   zongzi10010  阅读(360)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示
CONTENTS