由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请教个virtual function的问题
相关主题
C++ Q98: Call member function in virtual function (转载)abstract Factory 的困惑
C++ 弱问一个private destructor
问个C++ virtual function的问题 (转载)问个程序问题
C++ 请教: about the memory layout of the class inheritance题2
[合集] C++问题(copy constructor)C++问题
C++下减少代码拷贝粘贴C++问题,confusing...
ask a C++ inheritance questionfunc调用结束时出错
C++疑问How to use a function return by reference in C++
相关话题的讨论汇总
话题: func1话题: class话题: virtual话题: ojbb话题: aptr
进入Programming版参与讨论
1 (共1页)
s****n
发帖数: 1237
1
下面这段代码输出的是 Class B func1 x = 2, 我有几个疑问
1. 为啥调用的是B的func1但是x却是用了A的缺省值?
2. B的func1我特地设为private,为啥还是能调用?我试过直接B ojbB,就不能用ojbB
.func1();
3. 这里面涉及哪些相关的知识点,有什么好的quick tutorial可以推荐。
谢谢。
#include
using namespace std;
class A
{public:
virtual void func1 (int x = 2) {
cout << "Class A func1 x = " << x << "\n";
}
};
class B: public A
{private:
virtual void func1 (int x = 8){
cout <<"Class B func1 x = " << x << "\n";
}
};
void main () {
A *aPtr = new B;
aPtr -> func
p****o
发帖数: 1340
2
1. values of default arguments are resolved at compilation time
2. a function is virtual is virtual, and the "private" clause only
constraints the use of class B outside B.
kind of feeling strange at first, and it makes sense eventually.

ojbB

【在 s****n 的大作中提到】
: 下面这段代码输出的是 Class B func1 x = 2, 我有几个疑问
: 1. 为啥调用的是B的func1但是x却是用了A的缺省值?
: 2. B的func1我特地设为private,为啥还是能调用?我试过直接B ojbB,就不能用ojbB
: .func1();
: 3. 这里面涉及哪些相关的知识点,有什么好的quick tutorial可以推荐。
: 谢谢。
: #include
: using namespace std;
: class A
: {public:

I*****y
发帖数: 602
3
补充一下,由于1的原因,虚函数在不同的类里面,需要保持相同的默认参数,最好不
要使用默认参数。
2. access修饰符只针对静态类型,你的例子里面调用虚函数的时候,实际看的是A的修
饰符,与B无关。
说到底,默认参数和访问修饰符看的是静态类型,与动态类型无关。

【在 p****o 的大作中提到】
: 1. values of default arguments are resolved at compilation time
: 2. a function is virtual is virtual, and the "private" clause only
: constraints the use of class B outside B.
: kind of feeling strange at first, and it makes sense eventually.
:
: ojbB

s****n
发帖数: 1237
4
也就是说default parameter和accessible是static typing,
只有function actual body才是dynamic binding的?

【在 I*****y 的大作中提到】
: 补充一下,由于1的原因,虚函数在不同的类里面,需要保持相同的默认参数,最好不
: 要使用默认参数。
: 2. access修饰符只针对静态类型,你的例子里面调用虚函数的时候,实际看的是A的修
: 饰符,与B无关。
: 说到底,默认参数和访问修饰符看的是静态类型,与动态类型无关。

t****t
发帖数: 6806
5
对, 楼上说的很好. 就是static binding和dynamic binding的区别.
只有函数地址本身是dynamic binding的. 其它都是static. 为什么? 因为只有函数地
址是通过vtable查的, 别的都是编译时决定的.

ojbB

【在 s****n 的大作中提到】
: 下面这段代码输出的是 Class B func1 x = 2, 我有几个疑问
: 1. 为啥调用的是B的func1但是x却是用了A的缺省值?
: 2. B的func1我特地设为private,为啥还是能调用?我试过直接B ojbB,就不能用ojbB
: .func1();
: 3. 这里面涉及哪些相关的知识点,有什么好的quick tutorial可以推荐。
: 谢谢。
: #include
: using namespace std;
: class A
: {public:

t****t
发帖数: 6806
6
我为什么要重复一遍你说的话...

【在 s****n 的大作中提到】
: 也就是说default parameter和accessible是static typing,
: 只有function actual body才是dynamic binding的?

s****n
发帖数: 1237
7
能帮我巩固几遍,呵呵。
发现从来不编程要pick up c++还真不容易。

【在 t****t 的大作中提到】
: 我为什么要重复一遍你说的话...
1 (共1页)
进入Programming版参与讨论
相关主题
How to use a function return by reference in C++[合集] C++问题(copy constructor)
也问个二维数组的函数传递问题C++下减少代码拷贝粘贴
oop还是跟fp是对立的ask a C++ inheritance question
a simple question for C++ classC++疑问
C++ Q98: Call member function in virtual function (转载)abstract Factory 的困惑
C++ 弱问一个private destructor
问个C++ virtual function的问题 (转载)问个程序问题
C++ 请教: about the memory layout of the class inheritance题2
相关话题的讨论汇总
话题: func1话题: class话题: virtual话题: ojbb话题: aptr