C++-class与struct

C++中的class与struct

class 与 struct 最本质的区别就是默认成员权限以及默认继承方式不同
class 为 private,struct 为 public。

关于很多网上的传言

  1. struct 不能实现模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 经vs2019验证
template <typename T>
struct BaseNode
{
BaseNode(T input = 0) : num1(input)
{ }
T func(const T& input)
{
return input | num1;
}
private:
T num1;
};
int main()
{
BaseNode<int> nNode(0x111);
cout << nNode.func(0x1000);// 4396
}
  1. 友元
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <typename T>
struct BaseNode
{
BaseNode(T input = 0) : num1(input)
{ }
friend void GetNum(BaseNode& input)
{
cout << "node.num is " << input.num1 << endl;
}
private:
T num1;
};

int main()
{
BaseNode<int> nNode(0x111);
GetNum(nNode);// node.num is 273
return 0;
}
  1. 虚函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct BaseNode
{
virtual void fun()
{
cout << "Base Fun" << endl;
}
};
struct SonNode : public BaseNode
{
virtual void fun()
{
cout << "Son Fun" << endl;
}
};
int main()
{
BaseNode* node = new SonNode;
node->fun(); // Son Fun
return 0;
}