对象和类,公有类和私有类,构造函数和析构函数,const成员函数,this指针,对象数组,类作用域,抽象数据
来源:互联网 发布:战地之王透视源码 编辑:程序博客网 时间:2024/05/21 16:44
下面是头文件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
private是类对象默认访问控制。接下来的file1是函数的定义:
#include<iostream>//此文件是对头文件中的函数定义#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 negative;"<< company << "shares set to 0.\n";shares = 0;}elseshares = 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 if 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(){std::cout << "Company:" << company<< " Shares: " << shares << '\n'<< "Share price :$" << share_val<< " Total Worth: $" << total_val << std::endl;}
定义位于类声明中的函数都将自动成为内联函数。
类所创建的每个对象都有自己的存储空间,用于存储内部变量和类成员,但同一个类的所有对象共享一组类方法(即 函数)。
接下来的file3是对函数的调用:
#include<iostream>#include"stock00.h"int main(){Stock fluffy_the_cat;fluffy_the_cat.acquire("NanoSmart", 20, 12.15);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();return 0;}类数据隐藏并不是存储该数据的内存不可访问,而是你不知道存储该数据的地址。
类构造函数:由于类的数据是私有的,所以不可以使用普通的列表初始化方法对类对象赋初值,要使用类构造函数。若在类外定义构造函数,则要加上域作用符,例:
Stock::Stock(const string &co, long n, double pr){company = co;if (n < 0){std::cerr << "Number of shares can't be negative;"<< company << " shares set to 0.\n";shares = 0;}elseshares = n;share_val = pr;set_tot();}比较简单的构造函数也可以使用参数初始化表的方式来构造,例如:Stock(int h,int n):height(h), no(n){}
使用构造函数的方法有2种:1。显式调用:Stock food=Stock("World cabbage",250,1.25); 2.隐式调用:Stock garment("Furry Marson",50,2.5);
在没有构造函数的情况下,C++将调用默认的构造函数。
析构函数:在对象过期时会调用析构函数,Stock::~Stock(); 该函数没有参数。
#include<iostream>using namespace std;int main(){{Stock hello;//假设析构函数已被认为定义,作用是输出end单词hello.show();}return 0;}如上如果main()函数中没有多一个大括号,则对象将先执行return0,再消失,也就看不懂end单词了,有括号的话,对象将在退出其定义所属的代码块时消失,调用析构函数,就可以看到end单词了。
同类对象可以用赋值运算符来赋值。
const成员函数:如果对象为const,则函数也必须为const; 但函数为const的话,对象不一定要为const。只要调用的函数不修改数据,就应该在其后面加const,如:void show()const;
this指针:
const Stock &Stock::topval(const Stock &s)const//stock1对象和stock2对象在stock1中比较top_val的大小,s为stock2的引用{if (s.total_val > total_val)//此处total_val也可以改为this->total_valreturn s;elsereturn *this;//返回该对象}this是对象的地址,*this是对象本身。
0 0
- 对象和类,公有类和私有类,构造函数和析构函数,const成员函数,this指针,对象数组,类作用域,抽象数据
- C++学习笔记(六)-- 类和对象 构造函数和析构函数 const成员函数 this指针 对象数组 堆栈管理变量
- 函数指针(全局函数/类成员函数)和函数对象
- C++之this指针和const对象/成员函数
- 谈函数指针(全局/类成员函数)和函数对象
- 谈函数指针(全局/类成员函数)和函数对象
- 谈函数指针(全局/类成员函数)和函数对象
- C++:对象数组、对象动态申请和释放、类的定义和实现分开、this指针、常成员函数、时钟
- C++中类的const成员函数和const对象
- C++中的const成员函数和const类对象
- 在派生类中使用对象成员时,构造函数和析构函数的作用过程。
- C++(typedef、一维数组转成二维数组、C和C++区别、成员地址成员指针、构造析构函数、this指针、const用法、显示时间、const用法)
- Javascript构造函数,公有,私有特权和静态成员
- javascript构造函数中的公有,私有,特权和静态成员
- 类中的常量, const对象和成员函数
- 类和对象、构造析构函数
- const成员函数和对象
- this指针指向当前调用对象,只是用于类的非静态成员函数。静态函数和全局函数 无当前对象,无this指针。
- 提高代码质量的12个技巧
- 在开发微信支付过程遇到的坑
- 玲珑杯#11 D 1099
- 使用JAVA生成二维码
- 玲珑杯#11 D 1099
- 对象和类,公有类和私有类,构造函数和析构函数,const成员函数,this指针,对象数组,类作用域,抽象数据
- JAVA学习之打印空心菱形
- 博客搭建教程(持续更新)
- 17款最佳的代码审查工具
- poj1250 Tanning Salon
- MLlib分类算法实战演练--Spark学习(机器学习)
- 各种DP的总结
- Markdown写作语法
- 关于 结构体 的使用