面向对象----类基础知识
来源:互联网 发布:单片机学习网站 编辑:程序博客网 时间:2024/06/05 15:55
1、static和const变量
static变量是类的所有对象所共享的,他必须在类的外面定义和初始化,计算类的内存大小时不用考虑static变量
const变量只能在类的初始化函数列表中进行初始化
const static变量一般在类的外面定义和初始化
2、空类的大小是1
空类的大小是1,那是被编译器插进去的一个char ,使得这个class的不同对象在内存中配置独一无二的地址,也就是说这个char是用来标识类的不同对象的
3、构造函数和析构函数
基类中只要类中提供了任意一个构造函数,那么c++就不在自动提供默认构造函数
派生类中的构造函数必须要初始化基类中的成员数据,这通常是调用基类的构造函数来完成的
类成员的构造是按照在类中定义的顺序进行的,而不是按照构造函数说明后的冒号顺序进行构造的
#include <stdio.h> #include <stdlib.h>#include <iostream>#include <math.h>using namespace std;class B{ float x;public: B(float a) {x=a; cout<<"调用构造函数\n";} ~B() { cout<<"调用析构函数\n";} void Print(void) {cout<<x<<endl; }};void main(void){ B b1(1.0) ;//调用构造函数 b1.Print(); B b2=100; //调用构造函数 b2.Print(); b1=10; //调用构造函数产生一个临时对象B(10)赋值给b1,然后调用析构函数析构该对象 b1.Print(); cout<<"退出主函数\n";}
#include "stdafx.h"#include <iostream.h>#include <string.h>class B{public:B(){cout<<"default constructor"<<endl;}B(int i):data(i) {cout<<"constructed by parameter" <<data<<endl;}B(const B&b){cout<<"copy constructor"<<endl;}~B(){cout<<"destructed"<<endl;}private:int data;};B Play(B b){ return b ;}void main(){B t1=Play(5); //Play函数形参调用带参数构造函数生成临时对象,Play函数返回时调用复制构造函数,Play函数形参析构B t2=Play(t1); //Play函数形参调用复制构造函数生成临时对象,Play函数返回时调用复制构造函数,Play函数形参析构B t3=Play(10); //Play函数形参调用带参数构造函数生成临时对象,Play函数返回时调用复制构造函数,Play函数形参析构//析构t1,析构t2,析构t3}4、深拷贝和浅拷贝(类含有指针类型的成员)
深拷贝:拷贝的是指针地址所指向的变量
浅拷贝:拷贝的是指针地址 //类似int *p1=p2;两个指针指向同一块内存,当删除一个指针时,另外一个指针指向的对象也随之删除
5、复制构造函数
A a(b); 会调用类的复制构造函数
编译器通常会为类合成默认复制构造函数,但是当类中定义了指针类型的成员时,我们必须定义自己的复制构造函数以实现深层拷贝
6、无名对象
A(10)就会产生一个无名对象
A a=A(10); //利用无名对象初始化对象系统不会不调用拷贝构造函数
7、类的静态成员和静态函数
静态函数中只能访问静态成员和静态函数,而不能访问非静态成员和成员函数,因为静态函数中没有this指针。
8、友元类
在类A中声明友元类B,则在类B中可以访问类A中的所有成员变量和成员函数(包括私有成员)
- 面向对象----类基础知识
- Java基础知识04-面向对象-类
- 基础知识----面向对象思想
- c#面向对象基础知识
- 面向对象的基础知识
- 面向对象基础知识
- 面向对象基础知识
- 面向对象基础知识总结
- Java基础知识:面向对象
- Java基础知识:面向对象
- JAVA基础知识: 面向对象
- 面向对象基础知识总结
- Java面向对象基础知识
- 面向对象基础知识
- TypeScript 面向对象基础知识
- Java-面向对象基础知识
- 基础知识:面向对象
- 面向对象基础知识
- 创建XMLHttpRequest步骤详解
- Python中的全局变量操作
- Sniffer含义及工作原理
- 隐式转换
- HDU 3342 拓扑排序
- 面向对象----类基础知识
- Extjs之布局详解
- OpenNMS---邮件通知配置笔记--开源监控软件
- sort
- 十大hack工具
- OpenNMS--SNMP安装及配置(RRD)--开源监控软件
- (2)LUA程序设计-类型与值(type & value)
- 一步步写驱动--模块
- A project with an Output Type of Class Library cannot be started directly的解决