C++拾遗(十)类与动态内存分配(2)

静态成员函数

声明时包含关键字static。注意以下两点:

1、使用静态成员函数时不能通过对象或者this指针来调用,只能使用类名+作用域解析符来调用。

2、静态成员函数只能使用静态成员。

new操作符

在使用

#include <new>

之后,new操作符可以在分配内存时指定内存位置。例如:

 1 //创建一个512字节的内存缓冲区
 2 char *buffer = new char[512];
 3 ClassName *ptr1, *ptr2;
 4
 5 //在buffer缓冲区中创建一个类对象
 6 ptr1 = new (buffer) ClassName;
 7 //在堆中创建一个类对象
 8 ptr2 = new ClassName;
 9
10 delete ptr1;
11 delete [] buffer;

delete ptr1调用了类的析构函数,而delete [] buffer只删除了buffer缓冲区,没有调用类的析构函数。这时候一个可行的方案是在释放buffer前显示调用析构函数。

嵌套

C++允许在类中包含结构、类和枚举定义。

这些类型的作用域是整个类。

这种声明不会创建数据对象,只是指定了在类的作用域中可以使用这种类型。

成员初始化句法

1、只能用于构造函数。

2、非静态的const成员必须这样初始化。

3、引用数据成员必须这样初始化。

格式如下:

ClassName::ClassName(int n):mem1(n), mem2(0), mem3(null)
{
  //construct....
}

冒号后面mem1,mem2,mem3都是ClassName的数据成员,初始化的顺序与它们在类声明中的顺序一致。

时间: 2024-11-11 18:56:31

C++拾遗(十)类与动态内存分配(2)的相关文章

《C++ Primer Plus》读书笔记之十—类和动态内存分配

第12章 类和动态内存分配 1.不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存.可以在类声明之外使用单独的语句进行初始化,这是因为静态类成员是单独存储的,而不是对象的组成部分.注意:静态成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或枚举型const,则可以在类声明中初始化. 2.当使用一个对象来初始化另一个新建对象时,编译器将自动生成一个复制构造函数,因为它创建对象的一个副本.复制构造函数的

C++ primer plus读书笔记——第12章 类和动态内存分配

第12章 类和动态内存分配 1. 静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域运算符来指出静态成员所属的类.但如果静态成员是整形或枚举型const,则可以在类声明中初始化. P426-P427类静态成员的声明和初始化 //strnbad.h class StringBad { private: static int num_strings; … }; //strnbad.cpp int StringBad::num_strings = 0; 不能在类声明中初始化静态

C++-类和动态内存分配 大发彩_票平台开发

大发彩_票平台开发 地址一:[hubawl.com]狐霸源码论坛地址二:[bbscherry.com] 类和动态内存分配 动态内存和类 C++在分配内存时是让程序在运行时决定内存分配,而不是在编译时决定. 这样,可根据程序的需要,而不是根据一系列严格的存储类型规则来使用内存.C++使用new和delete运算符来动态控制内存. 1.1. 复习示例和静态类成员 这个程序使用了一个新的存储类型:静态类成员. //strngbad.h#include<iostream>#ifndef STRNGBA

类和动态内存分配

类和动态内存分配 整理自<C++ Primer Plus> 1. 动态内存和类 静态类成员有一个特点:无论创建了多少对象,程序都只创建一个静态类变量副本.也就是说,类的所有对象共享同一个静态成员.静态数据成员在类声明中声明,在包含类方法的文件中初始化. 复制构造函数用于将一个对象复制到新创建的对象中.也就是说,也就是说,它用于初始化过程中(包括按值传递参数),而不是常规的赋值过程中.按值传递意味着创建原始变量的一个副本.由于按值传递对象将调用复制构造函数,因此应该按引用传递对象.这样可以节省调

C++ 学习笔记之---类和动态内存分配

参考自<C++ primer plus 6th edition> 请各位放大观看吧,感觉博客园的编辑器有点坑.用图片之后,又发现太小,所以... 程序对内存的使用: 链接:http://zhidao.baidu.com/link?url=An7QXTHSZF7zN9rAuY05mvaHHar0xIpgK6Yqp9oAkm2GmZYoTAz9UpN4JuhWJvSLsbu0-lOcO47PzXcNWda6gK 定义静态成员变量: 可以在类声明中定义静态成员变量,使用 static 修饰.不过,虽

《C++ Primer Plus》12.6 复习各种(类和动态内存分配的)技术 笔记

12.6.1 重载<<运算符要重新定义<<运算符,以便将它和cout一起用来显示对象的内容,请定义下面的友元运算符函数:ostream & operator<<(ostream & os, const c_name & obj){    os << ...;  // display object contents    return os;}其中,c_name是类名.如果该类提供了能够返回所需内容的公有方法,则可在运算符函数中使用这些

类与其动态内存分配

1. 类中的静态非常数数据( static , no const)需要在类外进行赋值,结构为 int class::varname = values ; 2. 类有五种特殊的函数类型: (1) 默认的构造函数 (2) 默认的析构函数 (3) 默认的复制构造函数 (4) 赋值运算函数 (5) 地址运算函数 (1): 默认的构造函数是一个没有参数,没有数据操作的函数 (2): 默认的复制构造函数是一个浅复制的函数,逐一复制非静态成员 (3): 默认的析构函数是一个没有任何操作的函数 (4): 默认的

动态内存分配类实现

今天学习了C++语言的内存动态分配,并借助所学的知识实现了一个动态内存分配类. 问题的背景为:在已经实现了一个点类的基础上,实现一个动态内存分配类,这个类 的功能为:实现根据输入的数目size,动态的生成size个点类对象:并在提供一个借口 可以对pos位置的对象进行操作:在对象生存期结束时,可以自动释放分配的内存空间. 根据描述的问题描述的需求,规划了如下的类图: 写出了一个包含三个方法的对点动态分配内存的类: 1: #ifndef _ARRAYOFPOINTS_H 2: #define _A

String类型_static成员_动态内存分配_拷贝构造函数_const关键字_友元函数与友元类

1:String类型 1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 //初始化方法 6 string s1 = "hello";//默认构造方法 7 string s2(s1);//将s2初始化为s1的一个副本 8 string s3("value");//将s3初始化为字符串的副本 9 string s4(10,'x');//将字符串初始化为字符x的10个副本 10 co