由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - [c++] virtual member?
相关主题
问个 C++到C的问题ask a C++ inheritance question
请问2个类的问题C++ virtual function 问题
C++虚方法问题Re: 请教一道题目
[合集] 基类函数已经是virtual了,为啥子类还要virtual啊?请问这道题怎么解决?
Calling pure virtual method[合集] 一个链表倒转的问题
为什么指向子类对象的基类指针能访问子类中重载的虚函数,而不C++如何实现graph?
C++子类中调用父类指针的问题有人set up过 多个node的Cassandra 么? (转载)
kafka produce to AWSC++: What is the difference between the two approaches?
相关话题的讨论汇总
话题: node话题: node1d话题: next话题: virtual话题: c++
进入Programming版参与讨论
1 (共1页)
c*******h
发帖数: 1096
1
假设我有个 Node 类,里面有一个成员变量
Node *next;
用来指向下一个 Node。我从 Node 继承了一个子类,叫 Node1D。我希望 Node1
还是有一个成员变量叫 next,指向下一个 Node1。成员变量不像函数一样可以
virtual,那我应该怎么做呢?
p*u
发帖数: 2454
2

u can simply assign Node1 pointer to next, right?

【在 c*******h 的大作中提到】
: 假设我有个 Node 类,里面有一个成员变量
: Node *next;
: 用来指向下一个 Node。我从 Node 继承了一个子类,叫 Node1D。我希望 Node1
: 还是有一个成员变量叫 next,指向下一个 Node1。成员变量不像函数一样可以
: virtual,那我应该怎么做呢?

c*******h
发帖数: 1096
3
只是写两个next我看着不顺眼

【在 p*u 的大作中提到】
:
: u can simply assign Node1 pointer to next, right?

p*u
发帖数: 2454
4

why do u need 2 next members?? Node::next is not accessible 2 u??

【在 c*******h 的大作中提到】
: 只是写两个next我看着不顺眼
T********i
发帖数: 2416
5
他帖子里还有个Node1D,真够乱的。我都没看明白。

【在 p*u 的大作中提到】
:
: why do u need 2 next members?? Node::next is not accessible 2 u??

a***n
发帖数: 538
6
这个用virtual function返回member的地址就可以了吧。
X****r
发帖数: 3557
7
看起来楼主想要使这个成员的类型和类本身covariant,就是
class Node {
protected:
Node *next;
};
class Node1D : public Node {
protected:
Node1D *next;
};
但是这两个next是同一个成员。这个不能直接这样写,但是可以用setter/getter模拟:
class Node {
private:
Node *next;
protected:
Node *getNext() { return next; }
void setNext(Node *newNext) { next = newNext; }
};
class Node1D : public Node {
protected:
Node1D *getNext() { return (Node1D *)Node::getNext(); }
void setNext(Node1D *newNext) { Node::setNext(newNext); }
};
好久没写C++了,语法错了勿怪。

【在 T********i 的大作中提到】
: 他帖子里还有个Node1D,真够乱的。我都没看明白。
q*c
发帖数: 9453
8
看来还是死了最舒服, 一直躺着, 哈哈。

拟:

【在 X****r 的大作中提到】
: 看起来楼主想要使这个成员的类型和类本身covariant,就是
: class Node {
: protected:
: Node *next;
: };
: class Node1D : public Node {
: protected:
: Node1D *next;
: };
: 但是这两个next是同一个成员。这个不能直接这样写,但是可以用setter/getter模拟:

a***n
发帖数: 538
9
也可以这样吧。
template
class Node {
public:
T *next;
};
class Node1D : public Node {
};
X****r
发帖数: 3557
10
嗯,“魂飞九天,魄落九渊,生者悲苦,死人平安。”

【在 q*c 的大作中提到】
: 看来还是死了最舒服, 一直躺着, 哈哈。
:
: 拟:

相关主题
为什么指向子类对象的基类指针能访问子类中重载的虚函数,而不ask a C++ inheritance question
C++子类中调用父类指针的问题C++ virtual function 问题
kafka produce to AWSRe: 请教一道题目
进入Programming版参与讨论
X****r
发帖数: 3557
11
对,这样更好,但是C++里不像Java一样可以限定T必须从Node继承,所以Node里操作
next就有类型的麻烦可能需要cast。

【在 a***n 的大作中提到】
: 也可以这样吧。
: template
: class Node {
: public:
: T *next;
: };
: class Node1D : public Node {
: };

p*u
发帖数: 2454
12

拟:
no virtual methods??

【在 X****r 的大作中提到】
: 看起来楼主想要使这个成员的类型和类本身covariant,就是
: class Node {
: protected:
: Node *next;
: };
: class Node1D : public Node {
: protected:
: Node1D *next;
: };
: 但是这两个next是同一个成员。这个不能直接这样写,但是可以用setter/getter模拟:

X****r
发帖数: 3557
13
不用,因为其实是同一个函数类型上哄哄编译器的(最后都不会生成代码)。aaron 用
模板的方法就更清楚了。

【在 p*u 的大作中提到】
:
: 拟:
: no virtual methods??

a***n
发帖数: 538
14
返回类型都不一样不能virutal啊。

【在 p*u 的大作中提到】
:
: 拟:
: no virtual methods??

q*c
发帖数: 9453
15
不过我佛盛说轮回啊。
所以。。。还是苦练投胎这种真正的高科技。 比老霸老魏那些东西强多了, 呵呵。

【在 X****r 的大作中提到】
: 嗯,“魂飞九天,魄落九渊,生者悲苦,死人平安。”
z*******3
发帖数: 13709
16
已经投了阿,没有办法了
只能尽可能逼近了
下辈子太远,这辈子还得过

【在 q*c 的大作中提到】
: 不过我佛盛说轮回啊。
: 所以。。。还是苦练投胎这种真正的高科技。 比老霸老魏那些东西强多了, 呵呵。

q*c
发帖数: 9453
17
若问昔日因, 今生受者是;
若问来日果, 今生做者是。 :)

【在 z*******3 的大作中提到】
: 已经投了阿,没有办法了
: 只能尽可能逼近了
: 下辈子太远,这辈子还得过

X****r
发帖数: 3557
18
这个我完全赞同。
不过老魏老霸所争至少还有入手处,投胎这种高科技欲努力而不可得啊。

【在 q*c 的大作中提到】
: 不过我佛盛说轮回啊。
: 所以。。。还是苦练投胎这种真正的高科技。 比老霸老魏那些东西强多了, 呵呵。

q*c
发帖数: 9453
19
haha, 你没有入手处不代表别人没有哦 :)

【在 X****r 的大作中提到】
: 这个我完全赞同。
: 不过老魏老霸所争至少还有入手处,投胎这种高科技欲努力而不可得啊。

b*******s
发帖数: 5216
20
看样子是一维的点,估计是做图形学的

【在 T********i 的大作中提到】
: 他帖子里还有个Node1D,真够乱的。我都没看明白。
相关主题
请问这道题怎么解决?有人set up过 多个node的Cassandra 么? (转载)
[合集] 一个链表倒转的问题C++: What is the difference between the two approaches?
C++如何实现graph?Cassandra 里的 partition
进入Programming版参与讨论
p*u
发帖数: 2454
21

Google "virtual constructor"

【在 a***n 的大作中提到】
: 返回类型都不一样不能virutal啊。
a***n
发帖数: 538
22
c++什么时候可以virtual constructor了?

【在 p*u 的大作中提到】
:
: Google "virtual constructor"

i******t
发帖数: 22541
23
恩 应该是不能虚建吧

【在 a***n 的大作中提到】
: c++什么时候可以virtual constructor了?
p*u
发帖数: 2454
24

sigh, can't u guys @ least Google a bit???
http://www.parashift.com/c++-faq/virtual-ctors.html

【在 i******t 的大作中提到】
: 恩 应该是不能虚建吧
a***n
发帖数: 538
25
试了一下,真的可以。
class Node {
protected:
Node* next;
public:
virtual Node* get_next() { // Uses the default constructor
return next;
}
};
class Node1D : public Node {
public:
Node1D* get_next() {
return static_cast(next);
}
};

【在 p*u 的大作中提到】
:
: sigh, can't u guys @ least Google a bit???
: http://www.parashift.com/c++-faq/virtual-ctors.html

p*u
发帖数: 2454
26

a pointer is nothing but a number.

【在 a***n 的大作中提到】
: 试了一下,真的可以。
: class Node {
: protected:
: Node* next;
: public:
: virtual Node* get_next() { // Uses the default constructor
: return next;
: }
: };
: class Node1D : public Node {

a***n
发帖数: 538
27
不过set不行,parameter不支持covariant。

【在 p*u 的大作中提到】
:
: a pointer is nothing but a number.

N******K
发帖数: 10202
28
人肉法

【在 p*u 的大作中提到】
:
: a pointer is nothing but a number.

p*u
发帖数: 2454
29

why do u need covariant for set???

【在 a***n 的大作中提到】
: 不过set不行,parameter不支持covariant。
a***n
发帖数: 538
30
这里确实不用,get也不用。我只是想说parameter不协变的情况写不出虚函数,而且父
类总是会用自己那个,因为parameter会被自动upper cast。

【在 p*u 的大作中提到】
:
: why do u need covariant for set???

1 (共1页)
进入Programming版参与讨论
相关主题
C++: What is the difference between the two approaches?Calling pure virtual method
Cassandra 里的 partition为什么指向子类对象的基类指针能访问子类中重载的虚函数,而不
Small question about algorithmC++子类中调用父类指针的问题
[合集] 如何能让这个程序快一点呢?太慢了kafka produce to AWS
问个 C++到C的问题ask a C++ inheritance question
请问2个类的问题C++ virtual function 问题
C++虚方法问题Re: 请教一道题目
[合集] 基类函数已经是virtual了,为啥子类还要virtual啊?请问这道题怎么解决?
相关话题的讨论汇总
话题: node话题: node1d话题: next话题: virtual话题: c++