C++ Primer 学习笔记_48_类与数据抽象 --类的定义和声明【下】
2020-11-24 13:08
标签:c++ 类 类声明和定义 类对象 三、关于类定义的更多内容【接上】 四、类声明和类定义 在一个给定的源文件中,一个类只能被定义一次。如果在多个文件中定义一个类,那么每个文件中的定义必须是完全相同的。 可以声明一个类而不定义它: 在声明之后、定义之前,类Screen是一个不完全类型,即:已知Screen是一个类型,但不知道包含哪些成员。 不完全类型(incompletetype)只能以有限方式使用。不能定义该类型的对象。不完全类型只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义)使用该类型作为形参类型或返回类型的函数。 在创建类的对象之前,必须完整的定义该类。必须是定义类,而不是声明类,这样,编译器就会给类的对象预定相应的存储空间。同样的,在使用引用或指针访问类的成员之前,必须已经定义类。 为类的成员使用类声明: 只有当类定义已经在前面出现过,数据成员才能被指定为该类类型。如果该类型是不完全类型,那么数据成员只能是指向该类类型的指针或引用。 因为只有当类定义体完成后才能定义类,因此类不能具有自身类型的数据成员。然而,只要类名一出现就可以认为该类已声明。因此,类的数据成员可以是指向自身类型的指针或引用: 类的前身声明一般用来编写相互依赖的类。 五、类对象 定义一个类时,也就是定义了一个类型。一旦定义了类,就可以定义该类型的对象。定义对象时,将为其分配内存空间,但(一般而言)定义类型时不进行存储分配。 通过类定义出的对象都具有自己的类数据成员的副本。修改其中一个对象不会改变其他该类对象的数据成员。 1、定义类类型的对象 定义了一个类类型之后,可以按以下两种方式使用。 1)将类的名字直接用作类型名。 2)指定关键字class或struct,后面跟着类的名字: 2、为啥类的定义以分号结束 因为在类定义之后可以接一个对象定义列表,所以,定义必须以分号结束: 【最佳实践:】 通常,将对象定义成类定义的一部分是个坏主意!!!这样做,会使所发生的操作难以理解。对读者而言,将两个不同的实体(类和变量)组合在一个语句中,也会令人迷惑不解。 C++ Primer 学习笔记_48_类与数据抽象 --类的定义和声明【下】 标签:c++ 类 类声明和定义 类对象 原文地址:http://blog.csdn.net/zjf280441589/article/details/24672157类
--类的定义和声明【下】
//P374 习题12.8
class Sales_item
{
public:
double avg_price() const;
bool same_isbn(const Sales_item &rhs) const
{
return rhs.isbn == isbn;
}
Sales_item():units_sold(0),revenue(0){}
private:
std::string isbn;
unsigned units_sold;
double revenue;
};
double Sales_item::avg_price() const
{
if (units_sold)
{
return revenue / units_sold;
}
return 0;
}
//习题12.9
class Screen
{
public:
typedef std::string::size_type index;
char get() const
{
return contents[cursor];
}
inline char get(index ht,index wd) const;
index get_cursor() const;
Screen(index ht,index wd,std::string Cont):height(ht),width(wd),contents(Cont) {}
private:
std::string contents;
index cursor;
index height,width;
};
//前向声明
class Screen;
class LinkScreen
{
Screen Window;
LinkScreen *next;
LinkScreen *prev;
};
//P375 习题12.11
class Y;
class X
{
Y *y;
};
class Y
{
X x;
};
Screen scr;
//两条语句作用相同
class Screen scr;
class Sales_item
{
//...
};
class Sales_item
{
//...
} ccum,trans;
文章标题:C++ Primer 学习笔记_48_类与数据抽象 --类的定义和声明【下】
文章链接:http://soscw.com/index.php/essay/22396.html