C++ 对象和类

目录

  • 抽象和类
    • 访问控制
    • 内联方法
    • 实现类成员函数
    • 使用类

抽象和类

类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。

#ifndef STOCK00_H_
#define STOCK00_H_

#include 

class Stock
{
    private://可不写,默认是private
        std::string company;
        long shares;
        double share_val;
        double total_val;
        void set_tot(){total_val = shares * share_val;}//内联函数

    public:
        void acquire(const std::string & co,long n,double pr);
        void buy(long num,double price);
        void sell(long num,double price);
        void update(double price);
        void show();

};
#endif

访问控制

关键字privatepublic描述了对类成员的访问控制。使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数(或友元函数)来访问对象的私有成员。
公有成员函数是程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。
防止程序直接访问数据被称为数据隐藏
将实现的细节放在一起并将它们与抽象分开被称为封装

内联方法

void set_tot(){total_val = shares * share_val;}//内联函数

类声明常将短小的成员函数作为内联函数,set_tol()符合这样的要求。
也可以在类声明之外定义成员函数,使之成为内联函数,只需在类实现部分中定义函数时使用inline限定符即可。

class Inline_test
{
	private:
		void test();
	public:
	
};
inline void Inline_test::test()//using inline in definition
{

}

实现类成员函数

  • 定义成员函数时,使用作用域解析运算符::来标识函数所属的类
  • 类方法可以访问类的private组件
#include
#include"stock00.h"

//定义成员函数时,使用作用域解析运算符::来标识函数所属的类

void Stock::acquire(const std::string & co,long n,double pr)
{
    company = co;
    if(n<0)
    {
        std::cout << "Number of shares can't be nagative;" 
        << company << " shares set to 0.\n";
        shares = 0;

    }
    else
        shares = n;

    share_val = pr;
    set_tot();
}

void Stock::buy(long num,double price)
{
    if(num<0)
    {
        std::cout << "Number of shares purchased can't be negative. " 
        << "Transaction is aborted.\n";

    }
    else
    {
        shares += num;
        share_val = price;
        set_tot();
    }

}
void Stock::sell(long num,double price)
{
    using std::cout;
    if (num<0)
    {
        cout << "Number of shares sold can't be negative. "
         << "Transaction is aborted.\n";
    }
    else if(num > shares)
    {
        cout << "You can't sell more than you have! "
        << "Transaction is aborted.\n";

    }
    else
    {
        shares -= num;
        share_val = price;
        set_tot();

    }
}

void Stock::update(double price)
{
    share_val = price;
    set_tot();
}

void Stock::show()
{
    using std::cout;
    cout << "Company: " << company << "Shares: " 
            << shares << '\n' << "Share Price: $" 
            << share_val << " Total Worth: $" 
            << total_val << '\n';
}

使用类

要创建类对象,可以声明类变量,也可以使用new为对象分配存储空间,可以将对象作为函数的参数和返回值,也可以将一个对象赋给另一个。

  • 声明类:
Stock joe,kate;
  • 使用成员的成员函数
joe.show();//通过成员运算符(.)

所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员,但同一个类的所有对象共享同一组类方法,即每种方法只有一个副本。
假设kate和joe都是Stock对象,则kate.shares将占据一个内存块,而joe.shares占用另一个内存块;但kate.show()和joe.show()都调用同一个方法,也就是说它们执行同一个代码块,只是这些代码用于不同的数据。

C++ 对象和类_第1张图片

#include
#include"stock00.h"
int main()
{
    Stock fluffy_the_cat;
    fluffy_the_cat.acquire("NanoSmart",20,12.50);
    fluffy_the_cat.show();
    fluffy_the_cat.buy(15,18.125);
    fluffy_the_cat.show();
    fluffy_the_cat.sell(400,20.00);
    fluffy_the_cat.show();
    fluffy_the_cat.buy(300000,40.125);
    fluffy_the_cat.show();
    fluffy_the_cat.sell(300000,0.125);
    fluffy_the_cat.show();

    return 0;

}

你可能感兴趣的:(C++,c++,开发语言)