【C++深度剖析学习总结】 16 类的真正形态
【C++深度剖析学习总结】 16 类的真正形态
作者 CodeAllen ,转载请注明出处
问题:经过不停的改进,结构体struct变得越来越不像它在C语言中的样子!!!
1.类的关键字
struct在C语言中已经有了自己的含义,必须继续兼容
在C++中提供了新的关键字class用于类定义
class和struct的用法是完全相同的
class和struct有什么区别?
在用struct定义类时,所有成员的默认访问级别是public
在用class定义类时,所有成员的默认访问级别为private
16-1 class
#include <stdio.h>
struct A
{
// defualt to public
int i;
// defualt to public
int getI()
{
return i;
}
};
class B
{
// defualt to private
int i;
// defualt to private
int getI()
{
return i;
}
};
int main()
{
A a;
B b;
a.i = 4;
printf("a.getI() = %d\n", a.getI());
b.i = 4;
printf("b.getI() = %d\n", b.getI());
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
2.类的真正形态
C++中的类支持声明和实现的分离
将类的实现和定义分开
.h头文件中只有类的声明:成员变量和成员函数的声明
.cpp源文件中完成类的其它实现:成员函数的具体实现
分析:Operator类的分析
#include <stdio.h>
#include "Operator.h"
int main()
{
Operator op; //定义类的对象
double r = 0;
op.setOperator('/');
op.setParameter(9, 3);//设置两个操作数
if( op.result(r) )
{
printf("r = %lf\n", r);
}
else
{
printf("Calculate error!\n");
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
::是运算符中等级最高的,它分为三种:
1)global scope(全局作用域符),用法(::name)
2)class scope(类作用域符),用法(class::name)
3)namespace scope(命名空间作用域符),用法(namespace::name)
他们都是左关联(left-associativity)
他们的作用都是为了更明确的调用你想要的变量,如在程序中的某一处你想调用全局变量a,那么就写成::a,如果想调用class A中的成员变量a,那么就写成A::a,另外一个如果想调用namespace std中的cout成员,你就写成std::cout(相当于using namespace std;cout)意思是在这里我想用cout对象是命名空间std中的cout(即就是标准库里边的cout)
小结
C++引进了新的关键字class用于定义类
struct和class的区别在于默认访问级别的不同
C++中类支持声明和实现的分离
在头文件中声明类
在源文件中声明类
文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。
原文链接:allen5g.blog.csdn.net/article/details/103835969
- 点赞
- 收藏
- 关注作者
评论(0)