class中的东西和继承、多态的概念
class中的private、public、protected
最近看了一些视频顺便总结一下class中的这几个类型以及继承
public:
在C++和C#中类的用法,语法是差不多的。当变量,函数之类的对象放在public中时,说明这些变量和函数是可以被外界访问的,自己本身可以使用,也可以在其他函数中调用。
private:
顾名思义,就是私有的,只有自己本身可以调用,其他外来的函数,是不能访问到的,是属于class中内部的。
protected:
在这个区域的东西,能够访问的就是自己本身-父类,还有衍生出来的子类。
在C++代码例子如下:
#include<iostream>
using namespace std;
class A{//定义一个父类
public:
A():i(0){
cout << "A::A()" << endl;
}
~A(){
cout << "~A::A()" << endl;
}//以上是构造函数和析构函数
/*构造函数我认为主要是用于对一些数值进行初始化,当然没有这个函数存在也可以,
然后析构函数我认为就是用来回收内存的,就是当它整个类的使用过后,回收其使用的内存*/
protected://表示只有它自己和子类可以访问
void set(int ii) {
i=ii;
cout << i << endl;
}
private://只有自己才能够访问的,可以防止外部对其内部数据的修改。
int i;// i是私有的,只有父类可以调用;
};
class B : public A{//B为A的子类-也是和继承有关
public :
void f(){
set(20);//可以使用
// i=30;
}
};
/*在调用B类时,B类继承了A所有的部分,当然不包括private部分
B可以在A的基础上添加一些自己所需要的性质,因此在调用B时,可以调用A的函数*/
int main()
{
B b;//定义一个B类型
int n;
cin >> n;
//b.set(n);//此时在main()函数中不能调用 因为set()函数只能在B中使用,
b.f();//B类函数的调用
return 0;
}
C#代码例子:
class A
{
public int c;//所有都可访问
public void print() { Console.WriteLine("class A :: print()"); }//定义函数
public A()
{
this.d = 10;//初始化定义
Console.WriteLine("A的构造函数");
}
~A()
{
Console.WriteLine("析构函数");
}
protected void f()//只有A和B可以访问
{
print();
Console.WriteLine(d + e);
}
private int d, e=20;//只有A可以访问
}
class B : A//B继承A,B是A的子类
{
public void sum(int x, int y)
{
Console.WriteLine(x + y);
f();
}
private int i=0;//B的私有变量
}
class Program
{
static void Main(string[] args)
{
A a=new A();//调用
B b=new B();
a.print();
b.sum(1, 1);
}
}
继承:
继承的例子也在以上代码中,主要是父类的派生。继承允许我们根据一个类来定义另一个类来定义一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。
abstract:
abstract可以用来修饰类,方法,属性,索引器和时间,这里不包括字段. 使用abstrac修饰的类,该类只能作为其他类的基类,不能实例化,而且abstract修饰的成员在派生类中必须全部实现,不允许部分实现,否则编译异常.C#中的abstract类不能被实例化,他只提供其他类的继承的接口。我自己理解成它就是作为子类而存在的,给其他class调用。目测很抽象。
例子:
abstract class MyAbs
{
public void HELLO()
{
Console.WriteLine("hello world");
}
}
class MyClass : MyAbs
{
}
class Program
{
static void Main(string[] args)
{
MyClass a = new MyClass();
a.HELLO();
//MyAbs b = new MyAbs();这是无法建立的
}
}
多态性:
多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。可以理解成出现函数同名的情况,但是参数类型,数量不同,出现不同性质的函数。
代码例子:
using System;
namespace PolymorphismApplication
{
class Printdata
{
void print(int i)//不同的参数类型
{
Console.WriteLine("Printing int: {0}", i );
}
void print(double f)
{
Console.WriteLine("Printing float: {0}" , f);
}
void print(string s)
{
Console.WriteLine("Printing string: {0}", s);
}
static void Main(string[] args)
{
Printdata p = new Printdata();
// 调用 print 来打印整数
p.print(5);
// 调用 print 来打印浮点数
p.print(500.263);
// 调用 print 来打印字符串
p.print("Hello C++");
Console.ReadKey();
}
}
}
目前感觉一些部分懵逼中
在此望:路过大佬,大牛,指导
class中的东西和继承、多态的概念的更多相关文章
- C++内存中的封装、继承、多态(上)
C++内存中的封装.继承.多态(上) 继我的上一篇文章:浅谈学习C++时用到的[封装继承多态]三个概念 此篇我们从C++对象内存布局和构造过程来具体分析C++中的封装.继承.多态. 一.封装模型的内存 ...
- java基础课程笔记 static 主函数 静态工具类 classpath java文档注释 静态代码块 对象初始化过程 设计模式 继承 子父类中的函数 继承中的构造函数 对象转型 多态 封装 抽象类 final 接口 包 jar包
Static那些事儿 Static关键字 被static修饰的变量成为静态变量(类变量) 作用:是一个修饰符,用于修饰成员(成员变量,成员方法) 1.被static修饰后的成员变量只有一份 2.当成员 ...
- Java继承多态中的方法访问权限控制
java中的方法天生具有继承多态特性,这点与C++有很大不同(需要在父类方发上加virtual关键字),但用起来确实方便了许多. 最简单的继承多态 声明一个接口BaseIF,只包含一个方法声明 pub ...
- 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...
- python面向对象中的封装、继承、多态
封装 可以简单的理解为隐藏一切可以隐藏的实现细节,只向外界提供简单的编程接口.我们在类中定义的方法其实就是把数据和数据的操作封装起来了,在我们创建了对象之后,只需要给对象发送一个消息(调用方法)就可以 ...
- python基础语法15 面向对象2 继承,多态,继承json模块中JSONEncoder,并派生出新的功能
继承 1.什么是继承? 继承是一种新建类的方式,新建的类称之为子类或派生类,继承的父类称之为基类或超类. - 在Python中,一个子类可以继承多个父类.(面试可能会问) - 在其它语言中,一个子类只 ...
- Java开发知识之Java的继承多态跟接口*
Java开发知识之Java的继承多态跟接口 一丶继承 1.继承的写法 在Java中继承的 关键字是 extends 代表一个类继承另一个类. 继承的含义以及作用: 继承就是基于某个父类的扩展.制定出来 ...
- 第五节:详细讲解Java中的接口与继承
前言 大家好,给大家带来详细讲解Java中的接口与继承的概述,希望你们喜欢 什么是接口(interface) 接口中的方法都是抽象方法,public权限,全是抽象函数,不能生成对象 interface ...
- Python设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
随机推荐
- 设计模式-前摄器模式(Proactor)
本周要进行boost asio库的学习,在学习之前发现最好需要先了解一下前摄器模式,这样对asio库的理解很有帮助,故写下此文 我之前写的随笔XShell的模拟实现中的链接方式可以说是同步的(服务器阻 ...
- MySQL学习进阶
存储引擎 MyISAMMySQL 5.0 之前的默认数据库引擎,最为常用.拥有较高的插入,查询速度,但不支持事务 InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5. ...
- Jmeter==HTTP信息头管理器的作用
HTTP信息头管理器在Jmeter的使用过程中起着很重要的作用,通常我们在通过Jmeter向服务器发送http请求(get或者post)的时候,往往后端需要一些验证信息,比如说web服务器需要带过去c ...
- 关于write()和fsync()
--关于write()和fsync() ----------------------------转载 write ssize_t write(int fd, const void *buf, si ...
- 关于JS中涉及的常用类型转换及运算符表达式
JS中的常用类型转换(一般用强制转换):1.强制转为整数:parseInt:写法:x = parseInt(x); 2.强制转换位小为:parseFloat:写法:x = parseFloat(x); ...
- 基于FPGA的RGB565_YCbCr_Gray算法实现
前面我们讲了基于FPGA用VGA显示一副静态图片,那么接下来我们就接着前面的工程来实现我们图像处理的基础算法里最简单的一个那就是彩色图像转灰度的实现. 将彩色图像转化为灰度的方法有两种,一个是令RGB ...
- Luogu P3390 【模板】矩阵快速幂
题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k ...
- 一篇文章学会Spring4.0
spring概述 spring 是一个开源框架. Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能. Spring 是 ...
- 【Centos7】安装mysql5.7.16.tar.gz
操作系统 centos7.1 云主机 1.下载好了压缩包到windows电脑上 2.使用Smartty的SCP传输到云主机的/home/xxx/下 3.解压 tar xvf mysql-5.7.16 ...
- Win7怎样禁用自带IE浏览器
Win7怎样禁用自带IE浏览器 ------------ 1.单击开始按钮,从弹出的菜单中,选择控制面板. 2.在控制面板界面,单击程序和功能 3.在程序界面中单击选择“打开或关闭Windows功能” ...