在Java中类是一种符合的数据类型,在C++中类的定义是:类是一种用户自己定义的复杂的数据类型,它需要先声明后使用类具有唯一的标示符,声明同一个名字的两个类是错误的。
类和其他的数据类型不同,它将不同的类型的数据和这些数据相关的操作封装在一起他们分别叫做类的数据成员和成员函数。
类的定义可以分为两部分:说明部分和实现部分
1、类声明的一般格式:
类的声明一般都是.h文件中声明相当于Java中接口。
class 类名{
private:
私有数据和函数
public:
公有数据和函数
protected:
保护数据和函数
};
2、定义成员函数
在类中声明的成员函数,还需要在程序中实现。
定义成员函数一般格式如下:
返回类型 类名::成员函数名(参数列表)
{
成员函数的函数体 //内部实现
}
以下是代码示例:
//stock00.h
#ifndef STOCK00_H_
#define STOCK00_H_
#include <string>
class Stock
{
//数据成员
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
//stock.cpp
#include <iostream>
#include <stdio.h>
#include "stock00.h"
using namespace std;
void Stock::acquire(const std::string &co,long n,double pr)
{
company=co;
if(n < 0)
{
std::cout <<"Mumber of shares can't be negative:"<<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 purchased can't be negative." <<"Transaction is aborted.\n";
}else if(num > shares){
cout <<"You can't sell more than you hanve:"<<"Transaction si aborted.\n";
}else{
shares -=num;
share_val = price;
set_tot();
}
}
void Stock::update(double price)
{
share_val = price;
set_tot();
}
void Stock::show(){
std:cout<<"Company:"<<company<<"Shares: "<<shares<<'\n'<<" Share price: $"<<share_val<<"Total worth: $"<<total_val<<'\n';
}
//usestook0.cpp
#include <iostream>
#include "stock00.h"
using namespace std;
int main()
{
Stock stock;
stock.acquire("ygc",20,12.5);
stock.show();
stock.buy(15,18.125);
stock.show();
stock.sell(400,20.00);
stock.show();
stock.buy(300000,40.125);
stock.show();
stock.sell(300000,0.125);
stock.show();
return 0;
}
总结:
和Java类的比较,在C++中类的定义类似于Java中的接口,在C++类中函数体后要加分号“;”在C++全选修饰符比如:public protected private 等不需要在每个函数前面一一的添加,只是分类添加一次就ok了。还有一点就是函数的参数能设置默认值,在Java中不可以设置默认参数。