类与封装的概念:
1、类:
类的实现、类的使用。
当使用类的时候,不需要关心实现的细节。当创建类的时候,才需要考虑到内部具体的实现细节。
2、类的封装:
成员变量,C++用于表示属性的变量。
成员函数,C++中用于表示类的行为的函数。
3、pubic、private关键字。(使得变量和函数有了访问权限)
pubic:成员变量和成员函数。可以在类的外部被访问。
private:成员变量和成员函数,只可以在内部被访问。
4、类成员的作用域:
类成员的作用域只在类的内部,外部无法直接访问。(可以通过定义对象的方式进行访问)
成员函数可以直接访问成员变量和调用成员函数。
类的外部可以通过类变量访问public成员。
类的作用域与访问权限无关
5、struct 与class 不同之处
C++中struct定义的类中所有的成员默认为public
class定义的类中左右的成员默认为private
实验:写出一个四则运算的类。
1、 calculate.h(头文件,用于定义类)
#ifndef __CALCULATE_H #define __CALCULATE_H class calculate { private: char symbol; double val_laft; double val_right; public: bool get_symbol(char op); void get_val(double latf,double right); bool result(double &r); }; #endif
2、创建calculate.cpp (源文件,具体实现)
#include "calculate.h" bool calculate::get_symbol(char op) { if(op == '+' || op == '-' || op == '*'|| op == '/') { symbol = op; return true; }else { return false; } } void calculate::get_val(double latf,double right) { val_laft = latf; val_right = right; } bool calculate::result(double &r) { bool ret = true; switch(symbol) { case '/': if(val_right == 0) ret = false; else r = val_laft/val_right; break; case '*': r = val_laft*val_right; break; case '+': r = val_laft+val_right; break; case '-': r = val_laft-val_right; break; default: ret = false; break; } return ret; }
3、创建主函数:
#include <stdio.h> #include "calculate.h" int main(int argc, char *argv[]) { double r; calculate test; test.get_symbol('/'); test.get_val(10,5); if( test.result(r) ) { printf("r = %lf ",r); } else printf("calculate error "); return 0; }
4、编译: g++ main.cpp calculate.cpp
5、运行结果:
r = 2.000000
C++中 ::作用域限定符
表示作用域,和所属关系。
比如一个A类:
存在一个函数test是属于A的,如下:
关于::的具体解析:
::是运算符中等级最高的,它分为三种:
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意思是在这里想用cout对象是命名空间std中的cout。
扩展资料:
C++中"std::":
std是一个类(输入输出标准),它包括了cin成员和cout成员,using name space std ,以后才能使用它的成员。其工作原理:
程序因为要体现高性能,所以都是编译型的。但其开发环境,为了方便测试,将调试环境做成解释型的。即开发过程中,以解释型的逐条语句执行方式来进行调试,以编译型的脱离开发环境而启动运行的方式来生成程序最终的执行代码。