c++中的类
来源:互联网 发布:think php sae 编辑:程序博客网 时间:2024/06/06 16:55
类
对于我这种cpp初学者,又使用过其他面向对象编程语言的人来说,c++的类的规则实在是太复杂了,在这里做一个整理
类的含义:抽象出现实中的实体,构建基本的属性和函数
类的组成:属性和函数
属性和方法有不同的修饰符
表示权限的 protected,public,private 表示静态的 static 静态变量: static数据成员必须在类定义体的外部定义,且只能定义一次。 static数据成员不能再类定义体的内部进行初始化。 const static数据成员可以在类定义体内进行初始化,不是强制的。 static数据成员的类型可以是该成员所属类的类型 非static成员被限定声明为其自身类对象的指针或引用。 static数据成员可以作为默认实参, 非static数据成员不能用作默认实参,因为它的值不能独立于所属的对象而使用。 静态(static)函数: static成员函数不能被声明为const static成员函数不能并声明为虚函数。 static成员函数没有this指针,它可以直接访问该类的static成员,但不能直接使用非static成员。 static关键字出现在类定义体中函数的声明处,外部定义不出现)。this指针 成员函数具有一个附加的隐含参数,即指向该类对象的一个指针this,与调用成员函数的对象绑定在一起。 普通的非const数据中this是一个const指针,可以改变值不能改变地址 const数据中this是一个const类型的const指针,不可以改变值不能改变地址表示返回值或者函数本身状态的 const mutable const 常量类型 在类中声明变量为const类型,但是不可以初始化 const常量的初始化必须在构造函数初始化列表中初始化,而不可以在构造函数函数体内初始化 const构造函数是不必要的 不能从const成员函数中返回指向类对象的普通引用, const成员函数只能返回*this作为一个const引用。基于成员函数是否为const,可以重载一个成员函数。 mutalbe可变数据成员 mutable。永远不能为const,甚至当它是const对象的成员时也是如此。const成员函数可以改变mutable成员。
特殊的方法
构造函数,属性名()---用于初始化 必须在构造函数初始化的变量: 类的const常量 类的引用类型成员 没有默认构造函数的类类型成员 如果类存在继承关系,派生类必须在其初始化列表中调用基类的构造函数 一个类哪怕只定义了一个构造函数,编译器也不会再生成默认构造函数了。 成员初始化的顺序就是在类中定义成员的次序。析构函数--用于释放内存等友元方法: 允许访问类的私有方法
属性
可以是常量,union,enum,struct ,object
类的调用有三种方式:
值 作用域范围类存在,作用域外被释放,释放时调用析构函数引用 跟被引用对象有关指针 需要手动删除
//main.cpp#include <iostream>#include "Books.h"using namespace std;int main(int argc, const char * argv[]) { cout <<"start:"; Books b("孤独深处","郝景芳",11); //Books b();//error b.showData(); return 0;}//Books.h//// Books.h// cpp_class//// Created by bikang on 16/9/1.// Copyright (c) 2016年 bikang. All rights reserved.//#ifndef __cpp_class__Books__#define __cpp_class__Books__#include <iostream>class Platform{public: int publish_year; std::string online_time; Platform(int p,std::string o);};class Books{private: const Platform platform; double price; static int initTime; const static int astatic_data = 11;public: int buy_time; std::string name; std::string author; const int const_data; //const Platform& getPlatForm(); Books(std::string name,std::string author,int buy_time=astatic_data); const static int getInitTime(); void showData(); ~Books();};#endif /* defined(__cpp_class__Books__) *///Books.cpp//// Books.cpp// cpp_class//// Created by bikang on 16/9/1.// Copyright (c) 2016年 bikang. All rights reserved.//#include "Books.h"//#include <iostream>Platform::Platform(int p,std::string o):publish_year(p),online_time(o){};int Books::initTime = 0;Books::Books(std::string name,std::string author,int buy_time):buy_time(buy_time),name(name),author(author),const_data(11),platform(buy_time,name){ std::cout << "start";}void Books::showData(){ std::cout <<"show data"; std::cout << this->name << this->author << this->buy_time <<std::endl;}Books::~Books(){}/*/errorconst Platform& Books::getPlatForm(){ return &(this->platform);//error}*/
0 0
- c++,C#,java中的类
- C#中的局部类
- c语言中的类!
- C语言中的类模拟
- C语言中的类模拟
- C++中的类
- C++---类中的静态成员
- 初识object-c中的类
- Objective--C中的NSNumber类
- C++builder 中的接口类
- Object-C中的集合类
- Objective-C中的集合类
- C语言中的类模拟
- C中的#
- c 中的 # #@ ##
- C中的#
- c中的“:”
- 【C++】C++中的C
- Python开发简单爬虫--学习笔记
- Android中Intent和PendingIntent的区别
- python主函数
- Android布局中的空格以及占一个汉字宽度的空格的实现
- Revit开发选中元素
- c++中的类
- 鸿洋大神的十大设计模式-通俗易懂
- 用<a>标签点击跳转页面不刷新的问题
- iOS调试利器Reveal
- Android pagerSlidingTab自定义滑动条(indicator)宽度
- 初识html5-canvas
- ORACLE백업과복구 문제 : 윈도우 CMD 에서 SPFILEORCL.ORA 파일 열지 못할때
- webstorm 2016.2在线破解和离线破解
- git命令