#include <iostream>
using namespace std;
class B {
protected:
int x;
public:
B(int i = 28) { x = i; }
virtual B f(B ob) { return x + ob.x + 1; }
void show() { cout << x; }
};
class D : public B {
public:
D(int i = -32)
: B(i)
{
}
B f(B ob) { return x + ob.x - 1; } //line 19
};
int main()
{
B *p1 = new D, *p2 = …Run Code Online (Sandbox Code Playgroud) class Collection c where
empty :: c key value
singleton :: key -> value -> c key value
insert
:: Ord key
=> key -> value -> c key value -> c key value
lookup :: Ord key => key -> c key value -> Maybe value
delete :: Ord key => key -> c key value -> c key value
keys :: c key value -> [key]
values :: c key value -> [value]
toList :: c key value …Run Code Online (Sandbox Code Playgroud) 假设我们有这两个函数
f1 :: Int -> [Int] -> Int -> [Int]
f1 _ [] _ = []
f1 x (h:t) y = (x * h + y):(f1 x t y)
f2 :: [Int] -> Int
f2 (h:t) = h
Run Code Online (Sandbox Code Playgroud)
为什么有效(f2 . f1 1 [1..10]) 1,但(f2 . f1 1) [1..10] 1不起作用?
为什么这是合法的
int i=4;
const int *l=&i;
cout<<*l;
i=6;
cout<<*l;
Run Code Online (Sandbox Code Playgroud)
(显示 46)
但这不是吗?
int i=4;
const int *l=&i;
*l=4;
Run Code Online (Sandbox Code Playgroud)
(根据我的理解,这两个在概念上是相同的)
我理解这两个例子的方式是两者都不应该被允许,但前者有效。为什么是这样?