第九章(1) 定义类_构造函数
- 格式:ppt
- 大小:67.00 KB
- 文档页数:21


一、单选题1.每个类()构造函数A. 只能有一个B. 只可有私有的C. 可以有多个D. 只可有缺省的2.已知类A中的一个成员函数的说明如下:void Set(A &a);则该函数的参数“A &a”的含义是( )A. 指向A的指针为aB. 将变量a的地址赋给类AC. 类A对象引用a用作函数的形参D. 变量A与a按位与后作函数参数3.假定AB为一个类,则执行AB x;语句时将自动调用该类的( )A. 有参构造函数B. 无参构造函数C. 拷贝构造函数D. 赋值构造函数4.拷贝(复制)构造函数的作用是A. 进行数据类型的转换B. 用对象调用成员函数C. 用对象初始化对象D. 用一般类型的数据初始化对象5.下列关于析构函数的描述中,错误的是( )A. 类中有且仅有一个析构函数B. 析构函数可以有形参C. 析构函数没有函数类型D. 析构函数在对象消失时被自动执行6.下列对类的构造函数和析构函数的描述中,正确的是( )A. 构造函数可以重载,析构函数不能B. 构造函数不能重载,析构函数可以C. 构造函数可以重载,析构函数也可以重载D. 构造函数不能重载,析构函数也不能重载7.假定MyClass为一个类,那么下列的函数说明中,( )为该类的析构函数.A. void ~MyClass();B. ~MyClass(int n);C. MyClass();D. ~MyClass();8.为了使类中的成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为A. publicB. protectedC. privateD. static9.下列对与拷贝构造函数的描述中,正确的( )A. 在C++中,如果不自定义类的拷贝构造函数,则每个类都有默认的拷贝构造函数B. 必须为每个类定义拷贝初始化构造函数C. 如果要使用拷贝构造函数,则必须在类中显示进行定义D. 定义拷贝构造函数则无须定义构造函数10.对于下面定义的类MyClass,在函数f()中将对象成员n的值修改为50的语句(划线处)应该是( )class MyClass{public:MyClass(int x){n=x;}void SetValue(int n1){n=n1;}private:int n;};int f(){MyClass *ptr=new MyClass(45);__________;}A. MyClass(50)B. SetValue(50)C. ptr - > SetValue(50)D. ptr - > n=50二、填空题1. ______运算符对指定类型对象动态分配内存并返回该类型的指针。
这样便可以用默认或特定的初始值创建CoOrd对象,如下所示:CoOrds p1=new CoOrds();CoOrds p2=new CoOrds(5,3);注意:此类包含公共数据成员。
建议不要使用这种编程方法,因为它使程序中任何位置的任何方法都可以不受限制、不经验证地访问对象的内部组件。
数据成员通常应当为私有的,并且只应当通过类方法和属性来访问。
实例:(类)class Employee{private string name;public string Name{get{return name;}set{name=value;}}private int age;public int Age{get{return age;}set{age=value;}}private int gongzhi;public int Gongzhi{get{return gongzhi;}//set{gongzhi=value;}}//无参数构造函数public Employee(){}public Employee(string_name,int_age,int_gongzhi){//如果变量的属性是只读的,就直接给变量本身赋值=_name;this.Age=_age;this.gongzhi=_gongzhi;}}实例:(类)//结构,结构是值类型的//结构在定义变量时不能给定初始值struct Employeestruct{private string name;public string Name{get{return name;}set{name=value;}}private int age;public int Age{get{return age;}set{age=value;}}private int gongzhi;public int Gongzhi{get{return gongzhi;}//set{gongzhi=value;}}//无参数构造函数//public Employeestruct()//{//}//有参数构造函数public Employeestruct(string_name,int_age,int_gongzhi){//如果要在结构中使用构造函数则必须给所有的变量赋值(在构造函数中赋值)=_name;this.age=_age;this.gongzhi=_gongzhi;}}私有构造函数:私有构造函数是一种特殊的实例构造函数。
js三种定义类的⽅法之前在伯乐看到的javascript定义类的三种⽅法。
javascript不⽀持类,但变通⼀下⽅法就可以模拟出‘类’;1、构造函数法⽤构造函数模拟“类”,在其内部⽤this关键字指向实例对象。
function Cat(){="⼩⿊";}要⽣成实例的话就⽤new关键字var cat1=new Cat();alert();类的属性和⽅法可以定义在构造函数的prototype对象上。
Cat.prototype.makeSound=function(){alert("喵喵喵");}⼆、Object.create()法。
为了解决”构造函数法”的缺点,更⽅便地⽣成对象,Javascript的国际标准ECMAScript第五版(⽬前通⾏的是第三版),提出了⼀个新的⽅法Object.create()。
⽤这个⽅法,”类”就是⼀个对象,不是函数。
var Cat={name:"⼩⿊";makeSound:function(){alert("喵喵喵");}}然后直接⽤Object.create()⽣成实例,这个就不需要⽤到new关键字了。
var cat1=Object.create(Cat);alert(); //⼩⿊cat1.makeSound();//喵喵喵各⼤浏览器的最新版本都⽀持这个⽅法,包括IE9,如果不⽀持此⽅法的话,如下做:if(!Object.create){Object.create=function(o){function F(){};F.prototype=o;return new F();}}这种⽅法⽐”构造函数法”简单,但是不能实现私有属性和私有⽅法,实例对象之间也不能共享数据,对”类”的模拟不够全⾯。
那么接下去看第三种⽅法。
三、极简主义法1、封装这种⽅法不实⽤this和prototype,代码部署起来⾮常简单,这⼤概也就是他被叫做“极简主义法”的原因。
1.1习题1解答1.(1)机器语言是计算机直接理解执行的语言,由一系列(二进制)指令组成,其助记符构成了汇编语言;接近人的自然语言习惯的程序设计语言为高级语言。
(2)结构化程序设计方法主要内容有:自顶向下,逐步求精;面向对象方法将现实世界中的客观事物描述成具有属性和行为的对象,抽象出共同属性和行为,形成类。
(3)C++程序开发通常要经过5个阶段,包括:编辑,编译,连接,运行,调试。
首先是编辑阶段,任务是编辑源程序,C++源程序文件通常带有.c p p扩展名。
接着,使用编译器对源程序进行编译,将源程序翻译为机器语言代码(目标代码),过程分为词法分析、语法分析、代码生成3个步骤。
在此之前,预编译器会自动执行源程序中的预处理指令,完成将其他源程序文件包括到要编译的文件中,以及执行各种文字替换等。
连接器的功能就是将目标代码同缺失函数的代码连接起来,将这个“漏洞”补上,生成可执行文件。
程序运行时,可执行文件由操作系统装入内存,然后CPU从内存中取出程序执行。
若程序运行进程中出现了错误,还在需要对程序进行调试。
(4)对象与对象之间通过消息进行相互通信。
(5)类是具有相同属性和行为的一组对象的抽象;任何一个对象都是某个类的一个实例。
(6)多态性是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。
(7)面向对象的软件开发过程主要包括面向对象的方法分析、面向对象的设计、面向对象的编程、面向对象的测试和面向对象的维护。
(8)泛型程序设计是指在程序设计时,将数据类型参数化,编写具有通用性和可重用的程序。
(9)#include<iostream>是一条预处理指令(语句),在编译(或预处理)时由编译器(或预编译器)执行,其功能是将iostream文件包含(复制)到指令处。
(10)C++中使用cin作为标准输入流对象,通常代表键盘,与提取操作符>>连用;使用cout作为标准输出流对象,通常代表显示设备,与<<连用。