C++ 类知识点
1. member function definitions are processed after the compiler processes all of the declarations in the class;
2. our only chance to initialize const or reference data members is in the constructor initializer , also a class type that doesnot have a default constructor.
3. 聚合类的概念 aggregate classes ,这里class的概念包含struct和union:
a) 聚合类的所有成员数据都是public的;
b) 聚合类不定义任何构造函数;
c) 聚合类没有类内初始化;
d) 聚合类没有基类或虚函数;
C语言中的大部分结构体都可以看做是聚合类。
4. literal class :
a) 数据成员均是常量的聚合类被称为literal class
b) 非聚合类只要满足如下条件也是literal class:
数据成员都是常量类型;
类必须至少有一个constexpr 构造器;
必须使用类的默认的析构函数;
如果数据成员有初始化器,此内置数据类型的初始化器必须是一个常量表达式;或者是成员是一个类,初始化器必须是成员函数自己的 constexpr 构造器;
5. constexpr constructor
6. 类的静态成员
a) 静态成员不可在类体内进行赋值,因为它是被所有该类的对象所共享的。你在一个对象里给它赋值,其他对象里的该成员也会发生变化。为了避免混乱,所以不可在类体内进行赋值;
b) 当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享。各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象 无关。静态方法就是与该类相关的,是类的一种行为,而不是与该类的实例对象相关。
c) 静态数据成员的用途之一是统计有多少个对象实际存在。
d) 静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一个类的
对像则静态数据成员都要被重新初始化。
e) 对所有的对象是一样的。静态成员可以被初始化,但只能在类体外进行初始化。 注意:不能用参数初始化表对静态成员初始化。一般系统缺省初始为0。
(1)、static成员的所有者是类本身和对象,但是多有对象拥有一样的静态成员。从而在定义对象是不能通过构造函数对其进行初始化。
(2)、静态成员不能在类定义里边初始化,只能在class body外初始化。
(3)、静态成员仍然遵循public,private,protected访问准则。
(4)、静态成员函数没有this指针,它不能返回非静态成员,因为除了对象会调用它外,类本身也可以调用。
#include "iostream"
using namespace std;
class test
{
private:
int x;
int y;
public:
static int num;
static int Getnum()
{
x+=5; // 这行代码是错误的,静态成员函数不能调用非静态数据成员,要通过类的对象来调用。
num+=15;
return num;
}
};
int test::num = 10;
int main(void)
{
test a;
cout<<test::num<<endl; //10
test::num = 20;
cout<<test::num<<endl; //20
cout<<test::Getnum()<<endl; //35
cout<<a.Getnum()<<endl; //50
system("pause");
return 0;
}
关于静态成员函数,可以总结为以下几点:
出现在类体外的函数定义不能指定关键字static;
静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;
非静态成员函数可以任意地访问静态成员函数和静态数据成员;
静态成员函数不能访问非静态成员函数和非静态数据成员;
由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,当同一类的所有对象使用一个量时,对于这个共用的量,可以用静态数据成员变量,这个变量对于同一类的所有的对象都取相同的值。静态成员变量只能被静态成员函数调用。静态成员函数也是由同一类中的所有对象共用。只能调用静态成员变量和静态成员函数。
引用自: http://www.jb51.net/article/41775.htm
C++ 类知识点的更多相关文章
- python 类知识点总结
python 类知识点总结 面向对象思想: 1.设计的时候,一定要明确应用场景 2.由对象分析定义类的时候,找不到共同特征和技能不用强求 1.简述类.对象.实例化.实例这些名词的含义: 类:从一组对象 ...
- 关于Java中的String类知识点小总结
Java中的String类知识点 前言 在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 如何创建字符串 最简单的方式 String str = "he ...
- java 对象 类 知识点 概览
第30集 面向对象,核心是对象,以对象来思考
- delphi 的一些注意点和知识点
关于Delphi中产生的文件 编辑阶段: pas/单元文件,dpk/组件包文件,dpr/工程文件,dfm/窗体文件 编译阶段: dcu/单元编译文件,dcp/Delphi Compile ...
- Python学习第十四篇——类初步使用及面向对象思想
class Restaurant(): def __init__(self,restaurant_name,cuisine_type): self.name = restaurant_name sel ...
- 面向对象高级——Object类、包装类以及匿名内部类
Object类 知识点:掌握Object类的作用.掌握Object类中toString().equal()方法的作用 ,掌握Object接收引用数据类型的操作. 假设一个类在定义时没有明白指明继承哪 ...
- Web标准:五、超链接伪类
Web标准:五.超链接伪类 知识点: 1.链接的四种样式 2.将链接转换为块状 3.用css制作按钮 4.首字下沉 1)链接的四种样式 超链接有四个伪类,分别是: a:link 未访问的链接 a: ...
- C++ 学习笔记(五)类的知识小结一(重载,友元函数,静态成员,new)
---恢复内容开始--- 学习C++类知识点还是挺多的,每个知识点学习的时候都觉得这个知识点咋那么多东西,其实真学完了再回头看好像也就那么点.这次用程序写一个黑猫揍白猫的故事总结一下这段时间学习的零碎 ...
- DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集
复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ...
随机推荐
- Android Fragment的使用
定义 Fragment可以理解成一个迷你型的活动,同样可以包含布局,同样有自己的生命周期.比Activity要轻量级,在程序内部做界面跳转要比Activity快的多. 静态添加 Fragment可以静 ...
- Js 根据不同浏览器弹出窗口
/// <reference path="intellisense/jquery-1.2.6-vsdoc.js" /> var userAgent = navigato ...
- 一个简单的游戏开发框架(七.动作Motion)
发现还没谈到最基本也是最重要的问题,怎么画图,画动画? 在原版cocos2d-x里画动画比较麻烦,见cocos2d-x学习笔记04:简单动画 cocostudio扩展出CCArmature类,就比较简 ...
- 转载css的background-position
这是一个有趣的话题 其实我并不确切的平时大家是怎么去应用或者玩转一个属性,一个值.我能肯定的是这些东西都有不少的可玩性. 我今天要聊的 background-position 应该已经被大家玩得色彩斑 ...
- Makefile 一点一滴(三)—— 尝试简单的变量替换
上一版的 makefile: TestCpp : ./debug/TestCpp.o g++ -o TestCpp ./debug/TestCpp.o ./debug/TestCpp.o : ./sr ...
- asp.net文件下载文件另存为
这是一个困惑已久的问题…… 首先,用<a>标签的href打开浏览器能解读的文件(如txt,jpg,pdf等),会自动打开,无法做到弹出另存为的效果. 其次,网上搜索了各种JS解决办法,包括 ...
- EF实体框架数据操作基类(转)
//----------------------------------------------------------------// Copyright (C) 2013 河南禄恒软件科技有限公司 ...
- linux rlwrap
无意中发现了rlwrap,终于可以在linux下使用方向键上下翻页输入过的语句了. 比如sqlplus or ggsci中使用. 如果是ubuntu,则在software center中可以直接安装r ...
- iOS 自动化打包
理想的情况:不打开工程的情况下,直接双击就能打包出一个IPA文件,这样就可以让测试直接使用 itools 进行安装. 分如下两种情况: 1)不依赖cocoapod 管理项目的自动化. 如果没有一个简 ...
- 《java异常的一些总结》
关于Java中异常的一些总结: 3 有些时候,程序在try块里打开了一些物理资源(例如数据库连接,网络连接. 4 和磁盘文件等),这些物理资源都必须显示回收. 5 6 注意:Java的垃圾回收机制不会 ...