effective c++ 笔记之static_cast
2015-11-29 14:32
337 查看
尽量少用转型动作章节中讲到。子类执行的f并不是在当前对象上执行父类函数,只是在base class的副本上执行。那么
如下执行后,副本值被改写,而d的i依然是初始化时候的0
#include <stdio.h>
#include <stdlib.h>
#include <iostream> // std::cout
#include <thread> // std::thread
class B{
public :
int i=0;
public:
void f(){
i=1;
}
};
class D:B{
public:
void f(){
static_cast<B>(*this).f();
//i=2;
}
void f1(){
int i2=static_cast<B>(*this).i;
i2=3;
}
void f2(){
int i2=i;
i2=3;
}
};
/*
* === FUNCTION =========================================================
* Name: main
* Description: program entry routine.
* ========================================================================
*/
int main(int argc, const char *argv[])
{
class D d;
d.f();
d.f1();
d.f2();
int a=1;
return EXIT_SUCCESS;
} /* ---------- end of function main ---------- */
如下执行后,副本值被改写,而d的i依然是初始化时候的0
#include <stdio.h>
#include <stdlib.h>
#include <iostream> // std::cout
#include <thread> // std::thread
class B{
public :
int i=0;
public:
void f(){
i=1;
}
};
class D:B{
public:
void f(){
static_cast<B>(*this).f();
//i=2;
}
void f1(){
int i2=static_cast<B>(*this).i;
i2=3;
}
void f2(){
int i2=i;
i2=3;
}
};
/*
* === FUNCTION =========================================================
* Name: main
* Description: program entry routine.
* ========================================================================
*/
int main(int argc, const char *argv[])
{
class D d;
d.f();
d.f1();
d.f2();
int a=1;
return EXIT_SUCCESS;
} /* ---------- end of function main ---------- */
相关文章推荐
- vs2008 dlib编译问题USER_ERROR__missing_dlib_all_source_cpp_file__OR__inconsistent_use_of_DEBUG_or_ENABLE
- 【C++】满二叉树与完全二叉树的区别及判断
- C++引用方式实现两个值的互换
- C++运算符重载
- C++抛出异常与传递参数的区别
- C++抛出异常与传递参数的区别
- C++【线程同步】-临界区同步
- c/c++进制转换
- C++的chrono、ratio和ctime等头文件
- leetcode Search a 2D Matrix
- C语言命名空间
- c语言字符数组与字符串的使用详解
- 读取文本文件,打印到屏幕
- C语言中switch的用法
- 合并两个排序的链表(C++版)
- C++模版完全解析
- C++中的static关键字
- C++标准库Vector & Iterator用法
- C++ 关于 调用函数时值传递和引用的理解
- 用c语言进行“面向对象编程”------学习doubango源码心得------阿冬专栏!!!