[C++]C++学习笔记(二)

本文深入探讨了C++中类的构造函数和析构函数的使用,包括构造函数的作用、语法、如何创建类对象,以及析构函数的功能、用法和注意事项。同时介绍了类对象之间的赋值操作、const成员函数的概念和this指针的用法,以及类作用域内常量的正确声明方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)基本知识

//stock00.h
#ifndef STOCK00_H_
#define STOCK00_H_

#include <string>  

class Stock  // class declaration
{
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();
};    // note semicolon at the end

#endif



#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;
    }
    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()
{
    std::cout << "Company: " << company
              << "  Shares: " << shares << '\n'
              << "  Share Price: $" << share_val
              << "  Total Worth: $" << total_val << '\n';
}

1,类的私有成员变量只能通过类的成员函数去访问,类的成员函数可以通过类对象程序访问
2,声明类对象 
Stack Jack;
类的每个对象都有自己的存储空间,每个对象都有自己的成员变量,但是多个成员变量共享一份成员函数

(二)类的构造函数和析构函数

Stock::Stock(const string &co,long n,double pr )
{
	company = co;
	if (n < 0)
	{
		std::cerr<<"can not be negative";
		shares = 0;
	}
	else 
		shares - n;
	share_val = pr;
	set_tot()
}

构造函数在创建类对象的时候调用,构造函数被用来创建对象,而不能被对象调用
示例:
Stock flood = Stock("hello",4,6.9);
或者 Stock flood("hello",4,6.9);
或者 Stock *pstock = new Stock("hello",4,6.9);
析构函数用来做清理工作

Stock::~Stock()
{
	
}


(三)类对象可以互相赋值

Stock Stock1 =Stock("hello",4,6.9);
Stock Stock2("welcome",4,6.0);
Stock2 = Stock1;


(四)const成员函数
为了保证成员函数不会修改调用的类对象,C++是将const关键字放在函数括号的后面
void show()const;

 

(五)this指针
const Stock &topval(const Stock &s)const;
括号内的const是指该函数不会修改被显式的访问的对象
最后面的const是指该函数不会修改被隐式的访问的对象
例:top = Stock1.topval(Stock2);  //Stock2被显式访问,Stock1被隐式访问
this指针指向用来调用成员函数的对象,作为隐藏参数传递给函数
示例程序

const Stock &Stock::topval(const Stock &s)const
{
	if(s.total_val > total_val)
	{
		return s;
	}
	else
	{
		return *s
	}
}

 


(六)类作用域
(1)定义作用域为类的常量

class Bakery{
	const int months = 12;  //出错,因为在声明类的时候类还没有存储空间
	....
	};


正确的如下:

class Bakery{
	enum {months = 12};  //出错,因为在声明类的时候类还没有存储空间
	....
	};
class Bakery{
	static const int months = 12;  //出错,因为在声明类的时候类还没有存储空间
	....
	};



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值