网站首页 > java教程 正文
C++是一个多编程范式的编程语言,支持以函数为基本组件的面向过程的编程范式,也支持以类为基本构件的面向对象的编程范式。由此,其支持的函数类型也可以区分为与类相关的构造、析构、成员(静态、非静态)函数,以及全局函数(内部链接或外部链接),同时也支持友元函数。(与Java要求所有代码写在类内,所有数据和代码要隶属于不同的类不同,C++可以定义全局函数和全局变量(外部变量))
直接看实例和注释:
/* 构造、析构、成员(静态、非静态)函数、友元、全局函数
non_static member function: 有隐藏的this指针(指向对象数据成员的起始地址)
static member function: 没有this指针(所以不能访问non_static的成员数据),有类作用域
friend function: 有权限可以额外访问声明其为友元的类的私有成员
statci global function: internal linkage,otherwise, external linkage
constructor: initializing data member;
destructor: free or close resource
*/
#include <stdio.h>
class Demo
{
public:
Demo(double a,double b):ci(a)// 构造函数
{
pv = b;
de = new double(99.99);
}
friend double ff(Demo &d); // 友元函数声明
static double sf(double r) // static member function,没有隐含的this指针
{
return r*r*PI;
//return r*r*pv; // static member function can't access non-static member
}
double mf(double r) // non_static member function,隐含this指针
{
return 2*r*pv+PI-PI;
}
~Demo(){delete de;} // 析构函数,如果有资源占用需要释放,如free()、fclose()
Demo(const Demo& d):ci(d.ci) // 复制构造函数
{
pv = d.pv;
de = new double(99.98);
}
Demo& operator=(const Demo& d) // 赋值运算符重载
{
if(this != &d)
{
pv = d.pv;
delete de;
de = new double(99.89);
}
return *this;
}
double getci() const
{
return ci;
}
Demo operator++(int)
{
Demo d = *this;
pv = pv + 1;
return d;
}
static double PI;// 静态数据成员在类外初始化,表明其仅一份,与对象无关,但可为对象使用
private:
double pv;
const double ci; // const成员需使用初始化列表初始化
double *de; // point to heap memory block
};
double Demo::PI=3.1415926; // static成员类外初始化
double ff(Demo &d) // 友元函数定义
{
Demo e(5,6);
return d.pv+e.pv;
}
static double gf(Demo d) // 全局函数定义,static表示internal linkage
//static double gf(Demo &d) // 对于有指针成员的类,如果没有复制构造函数,则不能是值传递
{
static double sv = d.mf(3);
sv += 2*2*d.PI;// sv += d.pv // error,static function can't access non-static member
return sv;
}
const int g_var = 89; // 默认为internal linkage
int main()
{
Demo d(4,5);
double sum = g_var;
sum += d.sf(3);
sum += Demo::sf(3);
sum += d.mf(3);
sum += ff(d);
sum += gf(d);
printf("%lf\n",sum);
Demo e = d;
e++;
printf("%lf\n",e.getci());
getchar();
return 0;
}
类是对数据的再次分类或数据类型的自定义,是一种不同于面向过程的代码组织方式和编程思想,是对数据和函数的封装,提供了访问控制的安全机制,也提供了类名的命名空间和作用域。同时,也为非静态成员函数提供了隐含的this指针。当然,类的继承性和多态代码重用和扩展的一种重要手段。
-End-
猜你喜欢
- 2024-10-17 Java|剖析类内的五类成员:属性、方法、构造器、代码块、内部类
- 2024-10-17 JavaScript构造函数和原型:构造函数和原型 原创
- 2024-10-17 灵魂拷问:创建 Java 字符串,用""还是构造函数
- 2024-10-17 dart系列之:dart类中的构造函数(dart命名构造函数)
- 2024-10-17 Java面试题#构造函数和Setter哪种DI方式更好
- 2024-10-17 「php」construct() 函数介绍与使用方法详解
- 2024-10-17 为什么不允许使用 Java 静态构造函数?
- 2024-10-17 关于构造函数的Java面试问题(关于构造函数的java面试问题有哪些)
- 2024-10-17 编程语言Java如何创建对象,看完秒懂
- 2024-10-17 【教3妹学编程-java】详解父子类变量、代码块、构造函数执行顺序
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)