C++学习整理(类)

一、对以下代码作相关说明:

struct Sales_data
{
	//构造函数
	Sales_data() = default;//c++11新标准
	Sales_data(const std::string &s):bookNo(s){ }
	Sales_data(const std::string &s,unsigned n,double p):bookNo(s),units_sold(n),revenue(p*n) { }

	std::string isbn() const {return bookNo;}
	Sales_data& combine(const Sales_data&);
	double avg_price() const;
	std::string bookNo;
	unsigned units_sold = 0;
	double revenue = 0.0;
};
Sales_data add(const Sales_data&,const Sales_data&);
std::ostream &print(std::ostream &,const Sales_data&);
std::istream &read(std::istream &,Sales_data&);

1、定义在类内部函数是隐式的inline函数;

2、编译器负责把total的地址传递给isbn的隐式形参this,如下:

Sales_data total;
total.isbn();
3、isbn()函数后的const,修改隐式this指针的类型,如下:

std::string isbn() const {return bookNo;}  <=> std::string Sales_data::isbn(const Sales_data * const this){return this->isbn;}//伪代码
4、不依赖于默认构造函数的三个原因:

     a、编译器只会在发现没有定义任何构造函数时,生成默认构造函数
     b、对于某些内置类型或者复合类型(数组和指针)的对象被默认初始化时,至将是为定义
     c、不能为某些类生成默认构造函数;比如当该类中的包含一个没有默认构造函数的类型成员时

二、前向声明(不完全类型),可以定义其指针、引用、或者作为函数的参数或返回值(终于理解了以前链表结构体中的指针类型为啥有效)。声明如下:

class Screen;
三、友元函数必须在类外部声明后才能使用;

struct X
{
	friend void f() {/*...*/}
	X() {f();} // error,f还没有声明
	void g();
	void h();
};
void X::g(){return f();}//error,f还没有声明
void f();
void X::h(){return f();}
四、委托构造函数

class Sales_data{
public:
	//非委托构造函数初始化对应成员变量
	Sales_data(const std::string &s,unsigned n,double p):bookNo(s),units_sold(n),revenue(p*n) { }
	//以下为委托构造函数
	Sales_data():Sales_data("",0,0){}
	Sales_data(std::string s):Sales_data(s,0,0){}
	Sales_data(std::istream &is):Sales_data(){read(is,*this);}
}
五、 辨别以下的几种形式:

Sales_data obj();//声明了一个函数
Sales_data obj;//使用默认构造函数

int ia = new int;//不初始化,值为随意的
int ib = new int();//初始化为0
六、static关键字在类中:

1、static 关键字只能出现在类内部的声明语句中;
2、static 数据成员可以是不完全类型;
3、可以使用 static 成员作为类默认参数;


未完待续:

参考《C++Primer》



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值