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