我有一个基本的C++问题,不幸让我感到困惑.最近我遇到了一篇文章,该文章使用向下转换来使用向下转换来访问类的私有成员.我的问题是它为什么有效?
鉴于我有一个父类P,其私有成员m_p的类型为dummy*,那么使用的方法是创建一个hack类hackP,如下所示:
class hackP: public P {
public:
dummy *m_p;
};
Run Code Online (Sandbox Code Playgroud)
显然,使用像这样的代码片段可以访问class P私有成员m_p
P parent = ...;
hackP *hp = (hackP*)&parent;
// access parent m_p as hp->m_p
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
问题:当我在head元素中放置链接,样式或脚本元素时,浏览器似乎错误地将这些元素移动到body元素中,如通过遍历JavaScript节点树所检测到的那样.错误地我的意思是他们违反了规范.例如http://www.whatwg.org/specs/web-apps/current-work/#the-link-element,其中说明:
注意:如果使用rel属性,则元素仅限于head元素.
这是我的代码
<!DOCTYPE html>
<html>
<head>
<title>head test</title>
<meta charset="utf-8" />.
<link href="sample.css" rel="stylesheet" />
<script></script>
<style>p{font-family:"Times New Roman";font-size:20px;}</style>
</head>
<body>
<p>test paragraph</p>
<script type="text/javascript">
function htmlTree(obj){
var obj = obj || document.getElementsByTagName('html')[0];
var str = "<ul><li>" + obj.tagName;
if (obj.hasChildNodes()) {
var child = obj.firstChild;
while (child) {
if (child.nodeType === 1) {
str += htmlTree(child)
}
child = child.nextSibling;
}
}
str += "</li></ul>";
return str;
}
window.onload=document.write(htmlTree());
Run Code Online (Sandbox Code Playgroud)
这是结果:
HTML
HEAD
TITLE
META
BODY
LINK …Run Code Online (Sandbox Code Playgroud)