c++中的类

对于我这种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(){

}

/*
/error
const Platform& Books::getPlatForm(){
    return &(this->platform);//error
}
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值