默认构造函数

c++学习笔记一

我们两清 提交于 2020-03-22 14:54:28
定一个头文件person.h包含类的声明:每行后面的注释是学习过程中的体会与思考 #include<iostream> #ifndef PERSON_H_ #define PERSON_H_ class Person { private: int ID;//只有静态的常量数据成员才可以在类中初始化,与C#不一样 std::string Name; int Age; double Money; char * Address;//定义一个字符串指针成员 static int PersonNum;//定义一个静态变量记录对象的个数,静态变量要在源文件中初始化,如果没初始化会有错误,为什么? public: Person();//默认的构造函数 Person(int id,std::string name,int age,double m,const char* s);//带有参数的构造函数 Person(const Person & s);//定义复制构造函数 Person & operator=(const Person &p);//重载=操作符,实现深度复制 virtual ~Person();//析构函数 virtual void playway();//定义一个虚函数,通过虚函数实现多态 void GetName(); void SetPerson(int id, std:

拷贝、赋值与销毁

我只是一个虾纸丫 提交于 2020-03-15 12:21:09
一个类的拷贝控制操作包含: 拷贝构造函数 拷贝赋值运算符 移动构造函数 移动赋值运算符 析构函数 其中: 拷贝和移动构造函数定义了当用同类型的另一个对象初始化本对象时的操作。 拷贝和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时的操作。 析构函数定义了当此类型对象销毁时的操作。 如果一个类没有定义所有这些拷贝控制成员,编译器会自动为它定义缺省的操作。对一些类来说,依赖于这些操作的默认定义会导致灾难。 拷贝构造函数 如果一个构造函数的第一个参数是自身类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数: class Foo{ public: Foo(); //默认构造函数 Foo(const Foo&); //拷贝构造函数 }; 拷贝构造函数的第一个参数必须是引用类型。 虽然可以定义一个接受非 const 引用的拷贝构造函数,但是此参数几乎总是 const 的。 拷贝构造函数在一些情况下会隐式使用,因此拷贝构造函数通常不定义成 explicit 。 合成拷贝构造函数 如果没有自定义拷贝构造函数,编译器会自动生成一个,与合成默认构造函数不同,即使定义了其他构造函数,编译器也会合成一个拷贝构造函数。 一般情况,合成的拷贝构造函数会从给定对象中依次将每个非 static 成员拷贝到正在创建的对象中,每个成员的类型决定了如何拷贝: 对类类型的成员

Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter

房东的猫 提交于 2020-02-28 21:33:38
总结: Adapter相当于一个数据源,可以给AdapterView提供数据,并根据数据创建对应的UI,可以通过调用AdapterView的setAdapter方法使得AdapterView将Adapter作为数据源。 Adapter接口 : Adapter接口定义了如下方法: public abstract void registerDataSetObserver (DataSetObserver observer) Adapter表示一个数据源,这个数据源是有可能发生变化的,比如增加了数据、删除了数据、修改了数据,当数据发生变化的时候,它要通知相应的AdapterView做出相应的改变。为了实现这个功能,Adapter使用了观察者模式,Adapter本身相当于被观察的对象,AdapterView相当于观察者,通过调用registerDataSetObserver方法,给Adapter注册观察者。 public abstract void unregisterDataSetObserver (DataSetObserver observer) 通过调用unregisterDataSetObserver方法,反注册观察者。 public abstract int getCount () 返回Adapter中数据的数量。 public abstract Object getItem

C++对象模型

余生颓废 提交于 2020-02-04 01:03:41
C++在布局以及存取时间上的额外负担是由以下因素导致的 vitual function 机制,用来支持一个有效率的执行期绑定 vitrual base class,用以实现“多次出现在继承体系中的base class”,有一个单一而被共享的实例 多重继承的额外负担,发生在一个派生类和其第二或后继的基类之间的转换 C++是如何支持虚函数的 每个class产生指向每一个虚函数的指针,放在表格中,这个表格就是虚表 每个类对象被插入了一个指针,指向虚表,这个指针就是虚表指针, 虚表指针的设定和重置都由每一个class的构造、析构和赋值运算符自动完成 ,每一个类所关联的type_info object(用来支持runtime type identification)也是经过虚表指出的,通常放在虚表中的第一个位置 一个对象有多大 其非静态成员的总和大小 任何犹豫对其的需求而填补上的空间(可能存在于成员之间,也可能存在于集合边界) 加上为了支持虚机制而产生的任何额外负担 什么时候编译器会产生默认构造函数 对于class X,如果没有任何的用户定义构造函数,那么会有一个默认构造函数被隐式声明出来,这个默认的构造函数将是一个trivial(没有什么用的)的构造函数 默认构造函数在 被需要 的时候被编译器产生出来,这里的被需要分为两种情况,一种是程序的需要,这种需要应该由程序员来满足

Java复习——基础知识

烈酒焚心 提交于 2020-01-31 00:56:28
对于 作者曹胜欢的专栏:Java程序员从笨鸟到菜鸟 https://blog.csdn.net/csh624366188/category_9260964.html?utm_source=zlmf2019 基本小结 基础知识 Java以;结尾。 Java的注释有 : // 行注释 /* / 一行或多行注释 / * */ javadoc 注释 Java合法命名规范 : 大小写字母或者美元符号或者下划线开头,不能以数字开头,不能用关键字。类名一般大写开头,变量和方法一般小写开头。 Java的基本数据类型 :byte字节(8位)1字节 、boolean布尔(1位)、char字符(16位)两字节、short短整型(16位)两字节、int整形(32位)4字节、long长整型(64位)8字节、float单精度浮点型(32位)、double双精度浮点型(64位) Java的特殊引用类型 : String 引用类型 :引用类型是一个对象类型的,他的值指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。 定义变/常量和变量的初始化 :常量需要用final 修饰 ,约定常量 一般全部使用大写字母。 switch运算符 : switch (expr) expr 必须是与int类型兼容的类型,即为byte,short,char,int其中的一个。 流程跳转语句-break

C++知识点汇总文档

蓝咒 提交于 2020-01-29 03:14:26
C++知识点汇总文档 持续更新 朝花夕拾. 不写下来, 仿佛一切都没了见证. 编程来源于生活, 无非是对现实的抽象. 整理这份文档的时候我才发现, 自己对C++的了解无非是冰山一角 另, C++11真的 太恐怖了 , 新"特性"真的是"恐怖如斯" 另注: 本人才疏学浅, 难免有错漏之处, 还望不吝赐教 1.基本概念 内存管理 C++中的内存划分(内容来自 博客 ): 堆 由用户使用new delete关键字管理的内存区域 栈 栈中用来存放临时变量, 比如函数中的局部变量, 在代码块结束时会自动清除 自由存储区 由malloc等分配的内存块, 他和堆是十分相似的, 不过它是用free来结束自己的生命的 全局/静态存储区 全局变量和静态变量被分配到同一块内存中 常量存储区 比较特殊的存储区, 他们里面存放的是常量(不太了解, 有空扫下盲) new 关键字 用来在内存(堆)中开辟一块空间, 用户获得一个指向内存中目标位置的指针 用法 参考示例 //申请一块指向单个int对象的内存, 并将值初始化为"5" int *ptr_0 = new int(5); //申请一块指向5个连续int类型对象的内存 //使用C++11统一的花括号初始化, 直观地对内存进行初始化 int * ptr_1 = new int[5]{1,2,3,4,5}; delete 关键字 删除 使用new申请的内存 用法

js - 构造函数默认参数

痞子三分冷 提交于 2020-01-28 09:01:34
var pen = function ( name , color , price ) { this . name = name ; this . color = color ; if ( price == undefined ) { this . price = 9.9 ; } else { this . price = price ; } } var Rpen = new pen ( "Mao" , "Blue" , 200 ) ; var Bpen = new pen ( "Zhao" , "Red" ) console . log ( Rpen . name + "\n" + Rpen . color + "\n" + Rpen . price + "\n" ) ; console . log ( Bpen . name + "\n" + Bpen . color + "\n" + Bpen . price ) ; 来源: CSDN 作者: EdmundMao 链接: https://blog.csdn.net/weixin_43635647/article/details/104097136

C++对象构造语义学

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-27 05:41:59
1 对象赋值及析构语义学 1.1 对象复制 当我们没有写默认的拷贝构造函数并且不满足编译器为我们默认合成构造函数的条件,当我们拷贝构造一个对象时,编译器也会进行一些特殊的复制处理 EG: #include<iostream> using namespace std; class A { public: int a; }; int main() { A a; a.a = 1; A a1 = a; cout << a1.a << endl; //打印1 return 0; } 1.2 对象析构 在以下两种情况下,如果我们自己没有写析构函数,编译器会为对象合成析构函数: 继承的基类中有析构函数,编译器会为派生类合成一个析构函数调用基类的析构函数 存在某一个成员变量类型为类A(类A有析构函数) 2 new与delete探究 2.1 new后面加不加括号的区别 EG: #include<iostream> using namespace std; class A { public: int a; }; class B { public: B() { } int b; }; int main() { //对于类A,我们没有自己提供构造函数 /* A a; cout << a.a << endl; //会报错,使用未初始化变量 A a1 = A(); cout << a1.a << endl;

JAVA 资源管理器

早过忘川 提交于 2020-01-26 05:58:57
import java.awt.Dimension; import java.awt.Color; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.BoxLayout; import javax.swing.tree.TreePath; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; /* JTree的构造函数: JTree() JTree(Hashtable value) JTree(Object[] value)//只有这个构造函数可以创建多个根结点 JTree(TreeModel newModel) JTree(TreeNode root) JTree(TreeNode root, boolean asksAllowsChildren) JTree(Vector value) */ public class JTreeDemo { public static void main (String[] args) { //构造函数

VS 错误处理

喜欢而已 提交于 2020-01-07 12:12:43
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1错误: fatal error C1010: unexpected endof file while looking for precompiled header. Did you forget to add '#include"StdAfx.h"' to your source? #include"StdAfx.h" 你把这个放在头文件里面就行了 2 vc++ 编程出现错误error C2447: missing function header (old-styleformal list?) 原因:函数后面多了分号; SUNSHINE_APISSN_RETURN SsnWriteProfileString(__in INT nPlugInId, __in_opt LPTSTRlpszGroupName, __in LPTSTR lpszKey, __in LPTSTR lpszValue) ; 3 errorC2491: 'SsnWriteProfileString' : definition of dllimport function not allowed 错误 C2491:“SsnWriteProfileString’:dllimport 函数的定义不允许的 SUNSHINE_API SSN